Inngangsport for innkommende forespørsler
En tjeneste uten internettilgang kan likevel sende heartbeats til en overvåker for innkommende forespørsler. Den sender dem i stedet til en egendefinert sonde i sitt eget nettverk, og sonden sender dem videre til Status200.
Slik fungerer det
Et heartbeat gjennom sonden
- Tjenesten din sender forespørselen til sonden. Den samme
GETellerPOST, med den samme hemmelige nøkkelen, som den ville sendt til Status200, til en port sonden lytter på. - Sonden svarer med en gang. Den svarer
200før den sender forespørselen videre, så tjenesten din aldri venter på Status200. - Sonden sender den videre. Den sender forespørselen videre til Status200 med metode, headere og body, og legger til en header
Status200-Probe-Idsom nevner sonden. - Status200 leser den som vanlig. Overvåkerens kriterier ser forespørselen som om tjenesten hadde sendt den direkte.
Lytteren kjører på sin egen port, atskilt fra sondens helsesjekker, så du kan åpne den for det private nettverket ditt uten å åpne noe annet.
Når du bruker den
Bruk lytteren når:
- Tjenestene dine kjører i et isolert nettverkssegment uten utgående HTTPS-tilgang
- Du må holde all overvåkingstrafikk innenfor VPC-en eller det lokale nettverket ditt
- Du vil ha ett enkelt utgangspunkt, sonden, som får nå Status200
- Du allerede har tatt i bruk en egendefinert sonde og vil gjenbruke den for innkommende heartbeats
Kan tjenestene dine allerede nå https://status200.ru (eller den selvhostede URL-en din) direkte, trenger du ikke denne funksjonen: kall heartbeat-URL-en direkte fra tjenesten.
Før du begynner
- En egendefinert sonde som kjører. Status for den viser Tilkoblet. Se Egendefinerte probes for å installere en.
- En overvåker for innkommende forespørsler. Heartbeat-URL-en dens inneholder den hemmelige nøkkelen tjenesten din sender: se Innkommende forespørsel-overvåking.
- En port på sondens vert som tjenestene dine kan nå. Eksemplene bruker
3875.
Slå på lytteren
Sett PROBE_INGRESS_PORT til porten lytteren skal bruke. Enhver verdi større enn 0 slår den på; ikke satt, eller 0, lar den være av.
Docker
docker run --name status200-probe --network host \
-e PROBE_ID=<probe-id> \
-e PROBE_KEY=<probe-key> \
-e S200_URL=https://status200.ru \
-e PROBE_INGRESS_PORT=3875 \
-d registry.wilix.dev/status200/probe:latestUten --network host publiserer du porten med -p 3875:3875.
Docker Compose
services:
status200-probe:
image: registry.wilix.dev/status200/probe:latest
container_name: status200-probe
environment:
- PROBE_ID=<probe-id>
- PROBE_KEY=<probe-key>
- S200_URL=https://status200.ru
- PROBE_INGRESS_PORT=3875
network_mode: host
restart: alwaysUten network_mode: host publiserer du porten under ports: som "3875:3875".
Kubernetes
apiVersion: apps/v1
kind: Deployment
metadata:
name: status200-probe
spec:
selector:
matchLabels:
app: status200-probe
template:
metadata:
labels:
app: status200-probe
spec:
containers:
- name: status200-probe
image: registry.wilix.dev/status200/probe:latest
env:
- name: PROBE_ID
value: "<probe-id>"
- name: PROBE_KEY
value: "<probe-key>"
- name: S200_URL
value: "https://status200.ru"
- name: PROBE_INGRESS_PORT
value: "3875"
ports:
- name: ingress
containerPort: 3875
---
apiVersion: v1
kind: Service
metadata:
name: status200-probe-ingress
spec:
selector:
app: status200-probe
ports:
- name: ingress
port: 3875
targetPort: 3875
type: ClusterIPTjenester i klyngen sender da til http://status200-probe-ingress.<namespace>.svc.cluster.local:3875/heartbeat/<secret-key>.
Når lytteren kjører, står det i sondens logg Probe ingress listener started on port 3875 (heartbeat / incoming-request endpoints).
Send forespørsler til sonden
Tjenesten din sender til sonden i stedet for til Status200. Erstatt den offentlige heartbeat-URL-en:
https://status200.ru/heartbeat/<secret-key>med sondens ingress-URL:
http://<probe-host>:<PROBE_INGRESS_PORT>/heartbeat/<secret-key>Sti, metode, body og headere er ellers like, så eksisterende klientkode trenger bare å endre basis-URL-en. Sonden tar også imot /incoming-request/<secret-key>, som fungerer på samme måte.
# GET heartbeat
curl http://probe.internal:3875/heartbeat/YOUR_SECRET_KEY
# POST heartbeat with JSON body
curl -X POST http://probe.internal:3875/heartbeat/YOUR_SECRET_KEY \
-H "Content-Type: application/json" \
-d '{"status": "healthy", "version": "1.2.3"}'
# Cron job
*/5 * * * * curl -s http://probe.internal:3875/heartbeat/YOUR_SECRET_KEY > /dev/nullSlik sendes forespørsler videre
| Hva | Hvordan sonden håndterer det |
|---|---|
| Svaret | 200 med et tomt JSON-objekt ({}), sendt før forespørselen sendes videre. Som hos Status200 sendes det uansett hva som skjer etterpå: også en feil hemmelig nøkkel får det. |
| Metoder | POST sendes videre som POST. GET, og HEAD, sendes videre som GET. Andre metoder får 404 fra sonden. |
| Headere | Alle unntatt hop-by-hop-headerne (Host, Connection, Content-Length, Transfer-Encoding, Keep-Alive, Proxy-Authenticate, Proxy-Authorization, TE, Trailer, Upgrade) og Content-Encoding, siden sonden videresender bodyen ukomprimert. Sonden legger til Status200-Probe-Id. |
| Body | JSON- og skjema-bodyer på opptil 50 MB, som når du sender direkte til Status200. Som der kommer enhver annen body tom frem til overvåkeren. |
| Nye forsøk | Når en videresending feiler, prøver sonden igjen opptil PROBE_INGRESS_FORWARD_RETRY_LIMIT ganger og venter 2 s, så 4 s, så 8 s, og aldri mer enn 15 s. Deretter logger den feilen og forkaster forespørselen. |
| Proxyer | Videresendingen går gjennom sondens proxy når HTTP_PROXY_URL eller HTTPS_PROXY_URL er satt. |
| Hvor den går | S200_URL etterfulgt av /incoming-request-ingest/incoming-request/<secret-key>. |
Miljøvariabler
| Variabel | Standard | Hva den gjør |
|---|---|---|
PROBE_INGRESS_PORT | ikke satt (av) | Porten lytteren bruker. Enhver verdi større enn 0 slår den på. |
PROBE_INGRESS_FORWARD_TIMEOUT_MS | 10000 | Hvor lang tid hver videresending til Status200 kan ta, i millisekunder. En verdi under 1000 faller tilbake til standarden. |
PROBE_INGRESS_FORWARD_RETRY_LIMIT | 3 | Hvor mange ganger en mislykket videresending prøves igjen. 0 slår av nye forsøk. |
Sondens vanlige variabler (PROBE_KEY, PROBE_ID, S200_URL og proxyvariablene) gjelder alle: se Egendefinerte probes for den fullstendige listen.
Sikkerhetshensyn
- Endepunktet er med vilje uten autentisering: den hemmelige nøkkelen i URL-stien er autentiseringen, akkurat som på det offentlige endepunktet
status200.ru. Behandle den hemmelige nøkkelen som et passord. - Hold lytteren på det private nettverket ditt. Den skal ikke kunne nås fra internett. Bruk en network policy, en brannmurregel eller en
ClusterIP-tjeneste for å begrense hvem som kan nå den. - Sett TLS foran hvis du trenger kryptering på nettverket ditt. Lytteren snakker vanlig HTTP. Sett den bak en intern lastbalanserer eller en ingress controller for TLS på den strekningen. Videresendingen fra sonden til Status200 bruker HTTPS når
S200_URLbegynner medhttps://. - Begrens body-størrelsen selv hvis 50 MB er for mye. Sett en reverse proxy med en lavere grense foran lytteren.
Feilsøking
Sondens logg sier aldri at lytteren har startet
PROBE_INGRESS_PORT er ikke satt, er 0 eller er ikke et tall. Sett den til et portnummer og start sonden på nytt. Logglinjen er Probe ingress listener started on port <port> (heartbeat / incoming-request endpoints).
Sonden logger Probe ingress: failed to forward to <url> after N attempts
Sonden kunne ikke nå Status200, heller ikke etter de nye forsøkene. Sjekk sondens utgående tilkobling, proxyinnstillingene og verdien av S200_URL. Viser sonden også Frakoblet, kan du se Egendefinerte probes for å finne ut hvor forespørslene dens stopper.
Sonden logger Probe ingress: probe ID not available, forwarding without it
Sonden er ikke ferdig med å koble til Status200 ennå, så den sender forespørselen videre uten headeren Status200-Probe-Id. Forespørselen når likevel frem til overvåkeren.
Overvåkeren får forespørslene, men ikke gjennom sonden
Tjenesten din sender fortsatt til den offentlige URL-en. Sjekk at den sender til http://<probe-host>:<port>/...: et DNS-navn eller en oppføring i /etc/hosts som peker et annet sted, er den vanlige årsaken.
Overvåkeren får ingenting, og sonden logger ingenting
Forespørselen nådde aldri sonden. Sjekk at tjenesten når sondens vert på porten: en brannmurregel, en port som ikke er publisert, eller en Kubernetes-Service som ikke velger sondens pod.