Kubernetes ändert drei Dinge am Aufruf von Ihrem Server: wo der API key liegt, wie die Adresse des Besuchers Load Balancer und Ingress übersteht, und ob der Pod korzen.dev überhaupt erreichen darf. Der Aufruf selbst gehört Ihrem Framework: Nehmen Sie ihn aus der Anleitung für Ihren Stack.
Der Schlüssel
Bewahren Sie den API key in einem Secret auf, nie im Image oder in einer ConfigMap, und übergeben Sie ihn dem Container als Umgebungsvariable:
kubectl create secret generic korzen --from-literal=api-key=ak_your_key
# deployment.yaml, in your app's container env: - name: KORZEN_API_KEY valueFrom: secretKeyRef: name: korzen key: api-key
Die IP des Besuchers
Standardmäßig versteckt ein Cloud-Load-Balancer den Besucher hinter seiner eigenen Adresse, und der Ingress ebenso. Zwei Einstellungen bewahren sie: externalTrafficPolicy: Local am Service des Ingress-Controllers, und ingress-nginx, das dem Header vertraut, den der Load Balancer hinzufügt. Ihre Anwendung liest dann X-Real-IP oder den letzten Eintrag von X-Forwarded-For, die ingress-nginx setzt; hinter Cloudflare CF-Connecting-IP.
# The ingress controller's Service: keep the visitor's address on the way in. apiVersion: v1 kind: Service metadata: name: ingress-nginx-controller namespace: ingress-nginx spec: type: LoadBalancer externalTrafficPolicy: Local
# ingress-nginx's ConfigMap: trust the load balancer in front, pass the address on. apiVersion: v1 kind: ConfigMap metadata: name: ingress-nginx-controller namespace: ingress-nginx data: use-forwarded-headers: "true" # only if a load balancer you control is in front compute-full-forwarded-for: "true" # use-proxy-protocol: "true" # instead, if your cloud's load balancer speaks PROXY protocol
Egress
Blockiert der Cluster standardmäßig ausgehenden Traffic aus einem Namespace, muss der Pod Port 443 erreichen dürfen:
# Only if your cluster blocks egress by default: let the app reach HTTPS. # A plain NetworkPolicy matches addresses, not names, and korzen.dev answers from # Cloudflare's ranges; with Cilium, an FQDN rule can name korzen.dev itself. apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: app-egress-https spec: podSelector: matchLabels: app: shop policyTypes: [Egress] egress: - ports: - port: 443 protocol: TCP - ports: - port: 53 protocol: UDP
Im Betrieb
- Ein HTTP-Client pro Pod, offen gehalten; jede Replika öffnet ihre eigene Verbindung, und das ist in Ordnung.
- Lassen Sie nie eine Readiness- oder Liveness-Probe von Bot Protection abhängen: Ist es langsam, müssen die Pods in Betrieb bleiben und fail-open sein.
- Der Timeout Ihres SDK zählt von dort, wo der Cluster läuft: Ein Cluster in USA West braucht etwa 300 ms.
Häufige Fehler
- Die eigene Adresse des Ingress als die des Besuchers gesendet: Jede Entscheidung teilt sich dann eine IP, und Bot Protection sieht einen sehr beschäftigten Besucher.
use-forwarded-headerseingeschaltet, ohne etwas davor, das Sie kontrollieren: Ein Besucher schreibtX-Forwarded-Forund wählt seine Adresse.- Der Schlüssel in einer ConfigMap oder ins Image eingebacken, wo jeder mit Lesezugriff auf den Namespace oder die Registry ihn sieht.