View a markdown version of this page

Konfiguration von Kubernetes Ingress für Hybridknoten - Amazon EKS

Unterstützung für die Verbesserung dieser Seite beitragen

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Um zu diesem Benutzerhandbuch beizutragen, wählen Sie den GitHub Link Diese Seite bearbeiten auf, der sich im rechten Bereich jeder Seite befindet.

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Konfiguration von Kubernetes Ingress für Hybridknoten

In diesem Thema wird beschrieben, wie Sie Kubernetes Ingress für Workloads konfigurieren, die in Amazon EKS Hybrid Nodes ausgeführt werden. Kubernetes Ingress macht HTTP- und HTTPS-Routen von außerhalb des Clusters für Services innerhalb des Clusters verfügbar. Zur Nutzung von Ingress-Ressourcen ist ein Kubernetes-Ingress-Controller erforderlich, um die Netzwerkinfrastruktur und Komponenten für den Netzwerkverkehr einzurichten.

AWS unterstützt AWS Application Load Balancer (ALB) und Cilium for Kubernetes Ingress für Workloads, die auf EKS-Hybridknoten ausgeführt werden. Die Entscheidung, ALB oder Cilium für Ingress zu verwenden, hängt von der Quelle des Anwendungs-Datenverkehrs ab. Wenn der Anwendungsdatenverkehr aus einer AWS Region stammt, AWS empfiehlt die Verwendung von AWS ALB und dem AWS Load Balancer Controller. Wenn der Anwendungsdatenverkehr aus der lokalen lokalen Umgebung oder der Edge-Umgebung stammt, AWS empfiehlt es sich, die integrierten Ingress-Funktionen von Cilium zu verwenden, die mit oder ohne Load Balancer-Infrastruktur in Ihrer Umgebung verwendet werden können.

EKS-Hybridknoten-Eingang

AWS Application Load Balancer

Sie können den AWS Load Balancer Controller und den Application Load Balancer (ALB) mit dem Zieltyp ip für Workloads verwenden, die in Hybridknoten ausgeführt werden. Bei Verwendung des Zieltyps ip leitet ALB den Datenverkehr direkt an die Pods weiter und umgeht dabei den Netzwerkpfad der Service-Ebene. Damit ALB die Pod-IP-Ziele auf Hybridknoten erreichen kann, muss Ihr On-Premises-Pod-CIDR in Ihrem On-Premises-Netzwerk routingfähig sein. Darüber hinaus verwendet der Load AWS Balancer Controller Webhooks und erfordert eine direkte Kommunikation von der EKS-Steuerebene. Weitere Informationen finden Sie unter Konfiguration von Webhooks für Hybridknoten.

Überlegungen

Voraussetzungen

Verfahren

  1. Laden Sie eine IAM-Richtlinie für den Load AWS Balancer Controller herunter, mit der er in AWS APIs Ihrem Namen Anrufe tätigen kann.

    curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/refs/heads/main/docs/install/iam_policy.json
  2. Erstellen Sie eine IAM-Richtlinie mit der im vorherigen Schritt heruntergeladenen Richtlinie.

    aws iam create-policy \ --policy-name AWSLoadBalancerControllerIAMPolicy \ --policy-document file://iam_policy.json
  3. Ersetzen Sie den Wert für Clustername (CLUSTER_NAME), AWS Region (AWS_REGION) und AWS Konto-ID (AWS_ACCOUNT_ID) durch Ihre Einstellungen und führen Sie den folgenden Befehl aus.

    eksctl create iamserviceaccount \ --cluster=CLUSTER_NAME \ --namespace=kube-system \ --name=aws-load-balancer-controller \ --attach-policy-arn=arn:aws:iam::AWS_ACCOUNT_ID:policy/AWSLoadBalancerControllerIAMPolicy \ --override-existing-serviceaccounts \ --region AWS_REGION \ --approve
  4. Fügen Sie das Helm-Diagramm-Repository eks-charts hinzu und aktualisieren Sie Ihr lokales Helm-Repository, um sicherzustellen, dass Sie über die aktuellsten Diagramme verfügen.

    helm repo add eks https://aws.github.io/eks-charts
    helm repo update eks
  5. Installieren Sie den AWS Load Balancer Controller. Ersetzen Sie den Wert für Clustername (CLUSTER_NAME), AWS Region (AWS_REGION), VPC-ID (VPC_ID) und Load AWS Balancer Controller Helm-Diagrammversion (AWS_LBC_HELM_VERSION) durch Ihre Einstellungen und führen Sie den folgenden Befehl aus. Wenn Sie einen Cluster im gemischten Modus mit Hybridknoten und Knoten in der AWS Cloud ausführen, können Sie den Load AWS Balancer Controller auf Cloud-Knoten ausführen, indem Sie den Anweisungen unter AWS-Lastenverteilungs-Controller folgen.

    • Die neueste Version des Helm-Charts finden Sie, indem Sie helm search repo eks/aws-load-balancer-controller --versions ausführen.

      helm install aws-load-balancer-controller eks/aws-load-balancer-controller \ -n kube-system \ --version AWS_LBC_HELM_VERSION \ --set clusterName=CLUSTER_NAME \ --set region=AWS_REGION \ --set vpcId=VPC_ID \ --set serviceAccount.create=false \ --set serviceAccount.name=aws-load-balancer-controller
  6. Stellen Sie sicher, dass der AWS Load Balancer Controller erfolgreich installiert wurde.

    kubectl get -n kube-system deployment aws-load-balancer-controller
    NAME READY UP-TO-DATE AVAILABLE AGE aws-load-balancer-controller 2/2 2 2 84s
  7. Erstellen Sie eine Beispielanwendung. Das folgende Beispiel verwendet die Beispielanwendung Istio Bookinfo für Microservices.

    kubectl apply -f https://raw.githubusercontent.com/istio/istio/refs/heads/master/samples/bookinfo/platform/kube/bookinfo.yaml
  8. Erstellen Sie eine Datei mit dem Namen my-ingress-alb.yaml und dem folgenden Inhalt.

    apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: my-ingress namespace: default annotations: alb.ingress.kubernetes.io/load-balancer-name: "my-ingress-alb" alb.ingress.kubernetes.io/target-type: "ip" alb.ingress.kubernetes.io/scheme: "internet-facing" alb.ingress.kubernetes.io/healthcheck-path: "/details/1" spec: ingressClassName: alb rules: - http: paths: - backend: service: name: details port: number: 9080 path: /details pathType: Prefix
  9. Wenden Sie die Ingress-Konfiguration auf Ihren Cluster an.

    kubectl apply -f my-ingress-alb.yaml
  10. Die Bereitstellung von ALB für Ihre Ingress-Ressource kann einige Minuten dauern. Sobald der ALB bereitgestellt ist, wird Ihrer Ingress-Ressource eine Adresse zugewiesen, die dem DNS-Namen der ALB-Bereitstellung entspricht. Die Adresse hat das Format <alb-name>-<random-string>.<region>.elb.amazonaws.com.

    kubectl get ingress my-ingress
    NAME CLASS HOSTS ADDRESS PORTS AGE my-ingress alb * my-ingress-alb-<random-string>.<region>.elb.amazonaws.com 80 23m
  11. Zugriff auf den Service über die Adresse des ALB.

    curl -s http//my-ingress-alb-<random-string>.<region>.elb.amazonaws.com:80/details/1 | jq
    { "id": 1, "author": "William Shakespeare", "year": 1595, "type": "paperback", "pages": 200, "publisher": "PublisherA", "language": "English", "ISBN-10": "1234567890", "ISBN-13": "123-1234567890" "details": "This is the details page" }

Übersicht über Cilium Ingress und Cilium Gateway

Die Ingress-Funktionen von Cilium sind in die Architektur von Cilium integriert und können über die Kubernetes Ingress API oder Gateway API verwaltet werden. Wenn Sie noch nicht über Ingress-Ressourcen verfügen, AWS empfiehlt es sich, mit der Gateway-API zu beginnen, da diese eine ausdrucksstärkere und flexiblere Methode zur Definition und Verwaltung von Kubernetes-Netzwerkressourcen darstellt. Die Kubernetes-Gateway-API zielt darauf ab, die Definition und Verwaltung von Netzwerkressourcen für Ingress, Lastenausgleich und Service Mesh in Kubernetes-Clustern zu standardisieren.

Wenn Sie die Ingress- oder Gateway-Features von Cilium aktivieren, gleicht der Cilium-Operator Ingress-/Gateway-Objekte im Cluster ab und Envoy-Proxys auf jedem Knoten verarbeiten den Layer-7-Netzwerk-Datenverkehr (L7). Cilium stellt Ingress-/Gateway-Infrastruktur wie Load Balancer nicht direkt bereit. Wenn Sie Cilium Ingress/Gateway mit einem Load Balancer verwenden möchten, müssen Sie die Tools des Load Balancers, üblicherweise einen Ingress- oder Gateway-Controller, verwenden, um die Infrastruktur des Load Balancers bereitzustellen und zu verwalten.

Für den Ingress-/Gateway-Datenverkehr übernimmt Cilium den Kernnetzwerk-Datenverkehr und die Durchsetzung der L3/L4-Richtlinien, während integrierte Envoy-Proxys den L7-Netzwerk-Datenverkehr verarbeiten. Mit Cilium Ingress/Gateway ist Envoy für die Anwendung von L7-Routing-Regeln, Richtlinien und Anforderungsmanipulation, erweitertes Datenverkehrs-Management wie Datenverkehrsaufteilung und -spiegelung sowie TLS-Beendigung und -Initiierung verantwortlich. Die Envoy-Proxys von Cilium werden standardmäßig als separate DaemonSet (cilium-envoy) bereitgestellt, sodass Envoy und der Cilium-Agent separat aktualisiert, skaliert und verwaltet werden können.

Weitere Informationen zur Funktionsweise von Cilium Ingress und Cilium Gateway finden Sie auf den Seiten Cilium Ingress und Cilium Gateway in der Cilium-Dokumentation.

Vergleich zwischen Cilium Ingress und Gateway

Die folgende Tabelle fasst die Features von Cilium Ingress und Cilium Gateway in Cilium-Version 1.17.x zusammen.

Feature Ingress Gateway

Art des Dienstes LoadBalancer

Ja

Ja

Art der Dienstleistung NodePort

Ja

Keine1

Host-Netzwerk

Ja

Ja

Gemeinsam genutzter Load Balancer

Ja

Ja

Dedizierter Load Balancer

Ja

Nr.2

Netzwerkrichtlinien

Ja

Ja

Protokolle

Layer 7 (HTTP(S), gRPC)

Layer 7 (HTTP(S), gRPC)3

TLS Passthrough

Ja

Ja

Verwaltung des Datenverkehrs

Pfad- und Host-Routing

Pfad- und Host-Routing, URL-Weiterleitung und -Umschreibung, Datenverkehrsteilung, Header-Änderung

1 Cilium Gateway-Unterstützung für NodePort Dienste ist für Cilium Version 1.18.x geplant (#27273)

2 Cilium-Gateway-Support für dedizierte Load Balancer (#25567)

3 Cilium Gateway-Unterstützung für (#21929) TCP/UDP

Cilium Gateway installieren

Überlegungen

  • Cilium muss mit nodePort.enabled auf true konfiguriert werden, wie in den folgenden Beispielen dargestellt. Wenn Sie das kube-proxy-Ersatz-Feature von Cilium verwenden, müssen Sie nodePort.enabled nicht auf true setzen.

  • Cilium muss mit envoy.enabled auf true konfiguriert werden, wie in den folgenden Beispielen dargestellt.

  • Cilium Gateway kann im Load-Balancer-Modus (Standard) oder im Host-Netzwerkmodus bereitgestellt werden.

  • Wenn Sie Cilium Gateway im Load Balancer-Modus verwenden, muss die service.beta.kubernetes.io/aws-load-balancer-type: "external" Anmerkung auf der Gateway-Ressource gesetzt werden, um zu verhindern, dass der AWS Legacy-Cloud-Anbieter einen Classic Load Balancer für den Service des Typs erstellt, den Cilium für LoadBalancer die Gateway-Ressource erstellt.

  • Wenn Cilium Gateway im Host-Netzwerkmodus verwendet wird, ist der Service-of-Typ-Modus deaktiviert. LoadBalancer Der Host-Netzwerkmodus ist nützlich für Umgebungen ohne Load Balancer-Infrastruktur. Weitere Informationen finden Sie unter Host-Netzwerk.

Voraussetzungen

  1. Helm ist in Ihrer Befehlszeilenumgebung installiert. Weitere Informationen finden Sie unter Anweisungen zur Einrichtung von Helm.

  2. Cilium wurde gemäß den Anweisungen in CNI für Hybridknoten konfigurieren installiert.

Verfahren

  1. Installieren Sie die benutzerdefinierten Ressourcendefinitionen der Kubernetes Gateway-API (). CRDs

    kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/gateway-api/v1.2.1/config/crd/standard/gateway.networking.k8s.io_gatewayclasses.yaml kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/gateway-api/v1.2.1/config/crd/standard/gateway.networking.k8s.io_gateways.yaml kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/gateway-api/v1.2.1/config/crd/standard/gateway.networking.k8s.io_httproutes.yaml kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/gateway-api/v1.2.1/config/crd/standard/gateway.networking.k8s.io_referencegrants.yaml kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/gateway-api/v1.2.1/config/crd/standard/gateway.networking.k8s.io_grpcroutes.yaml
  2. Erstellen Sie eine Datei mit dem Namen cilium-gateway-values.yaml und den folgenden Inhalten. Im folgenden Beispiel wird Cilium Gateway so konfiguriert, dass es den standardmäßigen Load Balancer-Modus verwendet und dass ein separater Proxy cilium-envoy DaemonSet für Envoy verwendet wird, der nur für die Ausführung auf Hybridknoten konfiguriert ist.

    gatewayAPI: enabled: true # uncomment to use host network mode # hostNetwork: # enabled: true nodePort: enabled: true envoy: enabled: true affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: eks.amazonaws.com/compute-type operator: In values: - hybrid
  3. Wenden Sie die Helm-Wertedatei auf Ihren Cluster an.

    helm upgrade cilium oci://public.ecr.aws/eks/cilium/cilium \ --namespace kube-system \ --reuse-values \ --set operator.rollOutPods=true \ --values cilium-gateway-values.yaml
  4. Bestätigen Sie, dass der Cilium-Operator, der Agent und die Envoy-Pods ausgeführt werden.

    kubectl -n kube-system get pods --selector=app.kubernetes.io/part-of=cilium
    NAME READY STATUS RESTARTS AGE cilium-envoy-5pgnd 1/1 Running 0 6m31s cilium-envoy-6fhg4 1/1 Running 0 6m30s cilium-envoy-jskrk 1/1 Running 0 6m30s cilium-envoy-k2xtb 1/1 Running 0 6m31s cilium-envoy-w5s9j 1/1 Running 0 6m31s cilium-grwlc 1/1 Running 0 4m12s cilium-operator-68f7766967-5nnbl 1/1 Running 0 4m20s cilium-operator-68f7766967-7spfz 1/1 Running 0 4m20s cilium-pnxcv 1/1 Running 0 6m29s cilium-r7qkj 1/1 Running 0 4m12s cilium-wxhfn 1/1 Running 0 4m1s cilium-z7hlb 1/1 Running 0 6m30s

Cilium Gateway konfigurieren

Cilium Gateway wird für Gateway-Objekte aktiviert, indem gatewayClassName auf cilium gesetzt wird. Der Service, den Cilium für Gateway-Ressourcen erstellt, kann mit Feldern im Gateway-Objekt konfiguriert werden. Gängige Annotationen, die von Gateway-Controllern zur Konfiguration der Load-Balancer-Infrastruktur verwendet werden, können über das infrastructure-Feld des Gateway-Objekts konfiguriert werden. Bei Verwendung von LoadBalancer IPAM von Cilium (siehe Beispiel unterArt des Dienstes LoadBalancer) kann die IP-Adresse, die für den Typ Service verwendet werden soll, im Feld des Gateway-Objekts LoadBalancer konfiguriert werden. addresses Weitere Informationen zur Gateway-Konfiguration finden Sie in der Kubernetes-Gateway-API-Spezifikation.

apiVersion: gateway.networking.k8s.io/v1 kind: Gateway metadata: name: my-gateway spec: gatewayClassName: cilium infrastructure: annotations: service.beta.kubernetes.io/... service.kubernetes.io/... addresses: - type: IPAddress value: <LoadBalancer IP address> listeners: ...

Cilium und die Kubernetes Gateway-Spezifikation unterstützen die Ressourcen Gateway GatewayClass,, und HTTPRoute. GRPCRoute ReferenceGrant

Cilium Gateway bereitstellen

  1. Erstellen Sie eine Beispielanwendung. Das folgende Beispiel verwendet die Beispielanwendung Istio Bookinfo für Microservices.

    kubectl apply -f https://raw.githubusercontent.com/istio/istio/refs/heads/master/samples/bookinfo/platform/kube/bookinfo.yaml
  2. Bestätigen Sie, dass die Anwendung erfolgreich ausgeführt wird.

    kubectl get pods
    NAME READY STATUS RESTARTS AGE details-v1-766844796b-9965p 1/1 Running 0 81s productpage-v1-54bb874995-jmc8j 1/1 Running 0 80s ratings-v1-5dc79b6bcd-smzxz 1/1 Running 0 80s reviews-v1-598b896c9d-vj7gb 1/1 Running 0 80s reviews-v2-556d6457d-xbt8v 1/1 Running 0 80s reviews-v3-564544b4d6-cpmvq 1/1 Running 0 80s
  3. Erstellen Sie eine Datei mit dem Namen my-gateway.yaml und dem folgenden Inhalt. Das folgende Beispiel verwendet die service.beta.kubernetes.io/aws-load-balancer-type: "external" Anmerkung, um zu verhindern, dass der AWS Legacy-Cloud-Anbieter einen Classic Load Balancer für den Service des Typs erstellt LoadBalancer , den Cilium für die Gateway-Ressource erstellt.

    --- apiVersion: gateway.networking.k8s.io/v1 kind: Gateway metadata: name: my-gateway spec: gatewayClassName: cilium infrastructure: annotations: service.beta.kubernetes.io/aws-load-balancer-type: "external" listeners: - protocol: HTTP port: 80 name: web-gw allowedRoutes: namespaces: from: Same --- apiVersion: gateway.networking.k8s.io/v1 kind: HTTPRoute metadata: name: http-app-1 spec: parentRefs: - name: my-gateway namespace: default rules: - matches: - path: type: PathPrefix value: /details backendRefs: - name: details port: 9080
  4. Wenden Sie die Gateway-Ressource auf Ihren Cluster an.

    kubectl apply -f my-gateway.yaml
  5. Bestätigen Sie, dass die Gateway-Ressource und der entsprechende Service erstellt wurden. In diesem Stadium wird erwartet, dass das ADDRESS Feld der Gateway-Ressource nicht mit einer IP-Adresse oder einem Hostnamen gefüllt ist und dass dem Service vom Typ LoadBalancer für die Gateway-Ressource ebenfalls keine IP-Adresse oder kein Hostname zugewiesen wurde.

    kubectl get gateway my-gateway
    NAME CLASS ADDRESS PROGRAMMED AGE my-gateway cilium True 10s
    kubectl get svc cilium-gateway-my-gateway
    NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE cilium-gateway-my-gateway LoadBalancer 172.16.227.247 <pending> 80:30912/TCP 24s
  6. Fahren Sie fort, Art des Dienstes LoadBalancer um die Gateway-Ressource so zu konfigurieren, dass sie eine vom Cilium Load Balancer IPAM zugewiesene IP-Adresse verwendet, und/oder um die Gateway-Ressource so Host-Netzwerk zu konfigurieren, dass sie Netzwerkadressen verwendet NodePort oder hostet. Art des Dienstes NodePort

Cilium Ingress installieren

Überlegungen

  • Cilium muss mit nodePort.enabled auf true konfiguriert werden, wie in den folgenden Beispielen dargestellt. Wenn Sie das kube-proxy-Ersatz-Feature von Cilium verwenden, müssen Sie nodePort.enabled nicht auf true setzen.

  • Cilium muss mit envoy.enabled auf true konfiguriert werden, wie in den folgenden Beispielen dargestellt.

  • Wenn ingressController.loadbalancerMode auf dedicated gesetzt ist, erstellt Cilium dedizierte Services für jede Ingress-Ressource. Wenn diese ingressController.loadbalancerMode Option auf gesetzt istshared, erstellt Cilium einen gemeinsamen Dienst des Typs LoadBalancer für alle Ingress-Ressourcen im Cluster. Bei Verwendung des shared-Load-Balancer-Modus werden die Einstellungen für den gemeinsam genutzten Service wie labels, annotations, type und loadBalancerIP im ingressController.service-Abschnitt der Helm-Werte konfiguriert. Weitere Informationen finden Sie in der Wertereferenz von Cilium Helm.

  • Wenn ingressController.default auf true gesetzt ist, wird Cilium als Standard-Ingress-Controller für den Cluster konfiguriert und erstellt Ingress-Einträge, auch wenn ingressClassName bei Ingress-Ressourcen nicht angegeben ist.

  • Cilium Ingress kann im Load Balancer- (Standard), Knoten-Port- oder Host-Netzwerkmodus bereitgestellt werden. Wenn Cilium im Host-Netzwerkmodus installiert wird, sind die NodePort Modi Service of Type LoadBalancer und Service of Type deaktiviert. Weitere Informationen finden Sie unter Host-Netzwerk.

  • service.beta.kubernetes.io/aws-load-balancer-type: "external"In den Helm-Werten immer ingressController.service.annotations auf gesetzt, um zu verhindern, dass der AWS Legacy-Cloud-Anbieter einen Classic Load Balancer für den cilium-ingress Standardservice erstellt, der durch das Cilium Helm-Diagramm erstellt wurde.

Voraussetzungen

  1. Helm ist in Ihrer Befehlszeilenumgebung installiert. Weitere Informationen finden Sie unter Anweisungen zur Einrichtung von Helm.

  2. Cilium wurde gemäß den Anweisungen in CNI für Hybridknoten konfigurieren installiert.

Verfahren

  1. Erstellen Sie eine Datei mit dem Namen cilium-ingress-values.yaml und den folgenden Inhalten. Im folgenden Beispiel wird Cilium Ingress so konfiguriert, dass es den standardmäßigen Load dedicated Balancer-Modus verwendet und dass ein separater Proxy cilium-envoy DaemonSet für Envoy verwendet wird, der so konfiguriert ist, dass er nur auf Hybridknoten ausgeführt wird.

    ingressController: enabled: true loadbalancerMode: dedicated service: annotations: service.beta.kubernetes.io/aws-load-balancer-type: "external" nodePort: enabled: true envoy: enabled: true affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: eks.amazonaws.com/compute-type operator: In values: - hybrid
  2. Wenden Sie die Helm-Wertedatei auf Ihren Cluster an.

    helm upgrade cilium oci://public.ecr.aws/eks/cilium/cilium \ --namespace kube-system \ --reuse-values \ --set operator.rollOutPods=true \ --values cilium-ingress-values.yaml
  3. Bestätigen Sie, dass der Cilium-Operator, der Agent und die Envoy-Pods ausgeführt werden.

    kubectl -n kube-system get pods --selector=app.kubernetes.io/part-of=cilium
    NAME READY STATUS RESTARTS AGE cilium-envoy-5pgnd 1/1 Running 0 6m31s cilium-envoy-6fhg4 1/1 Running 0 6m30s cilium-envoy-jskrk 1/1 Running 0 6m30s cilium-envoy-k2xtb 1/1 Running 0 6m31s cilium-envoy-w5s9j 1/1 Running 0 6m31s cilium-grwlc 1/1 Running 0 4m12s cilium-operator-68f7766967-5nnbl 1/1 Running 0 4m20s cilium-operator-68f7766967-7spfz 1/1 Running 0 4m20s cilium-pnxcv 1/1 Running 0 6m29s cilium-r7qkj 1/1 Running 0 4m12s cilium-wxhfn 1/1 Running 0 4m1s cilium-z7hlb 1/1 Running 0 6m30s

Cilium Ingress konfigurieren

Cilium Ingress wird für Ingress-Objekte aktiviert, indem ingressClassName auf cilium gesetzt wird. Der/die Service(s), den/die Cilium für Ingress-Ressourcen erstellt, kann/können mit Annotationen zu den Ingress-Objekten konfiguriert werden, wenn der dedicated-Load-Balancer-Modus verwendet wird, sowie in der Cilium-/Helm-Konfiguration, wenn der shared-Load-Balancer-Modus verwendet wird. Diese Annotationen werden oft von Ingress-Controllern verwendet, um die Load-Balancer-Infrastruktur oder andere Attribute des Service zu konfigurieren, wie z. B. den Servicetyp, den Load-Balancer-Modus, Ports und TLS Passthrough. Die wichtigsten Annotationen werden unten beschrieben. Eine vollständige Liste der unterstützten Annotationen finden Sie in den Cilium-Ingress-Annotationen in der Cilium-Dokumentation.

Anmerkung Description

ingress.cilium.io/loadbalancer-mode

dedicated: Dedizierter Dienst des Typs LoadBalancer für jede Ingress-Ressource (Standard).

shared: Einzelner Dienst dieses Typs LoadBalancer für alle Ingress-Ressourcen.

ingress.cilium.io/service-type

LoadBalancer: Der Dienst wird vom Typ sein LoadBalancer (Standard)

NodePort: Der Service wird vom Typ sein NodePort.

service.beta.kubernetes.io/aws-load-balancer-type

"external": Verhindert, dass ältere AWS Cloud-Anbieter Classic Load Balancer für Dienste des Typs bereitstellen. LoadBalancer

lbipam.cilium.io/ips

Liste der IP-Adressen, die von Cilium IPAM zugewiesen werden sollen LoadBalancer

Cilium und die Kubernetes-Ingress-Spezifikation unterstützen exakte, präfix- und implementierungsspezifische Übereinstimmungsregeln für Ingress-Pfade. Cilium unterstützt Regex als implementierungsspezifische Übereinstimmungsregel. Weitere Informationen finden Sie unter Ingress-Pfadtypen und -Priorität und Beispiele für Pfadtypen in der Cilium-Dokumentation sowie in den Beispielen im Cilium Ingress bereitstellen-Abschnitt dieser Seite.

Ein Beispiel für ein Cilium-Ingress-Objekt ist unten dargestellt.

apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: my-ingress annotations: service.beta.kubernetes.io/... service.kubernetes.io/... spec: ingressClassName: cilium rules: ...

Cilium Ingress bereitstellen

  1. Erstellen Sie eine Beispielanwendung. Das folgende Beispiel verwendet die Beispielanwendung Istio Bookinfo für Microservices.

    kubectl apply -f https://raw.githubusercontent.com/istio/istio/refs/heads/master/samples/bookinfo/platform/kube/bookinfo.yaml
  2. Bestätigen Sie, dass die Anwendung erfolgreich ausgeführt wird.

    kubectl get pods
    NAME READY STATUS RESTARTS AGE details-v1-766844796b-9965p 1/1 Running 0 81s productpage-v1-54bb874995-jmc8j 1/1 Running 0 80s ratings-v1-5dc79b6bcd-smzxz 1/1 Running 0 80s reviews-v1-598b896c9d-vj7gb 1/1 Running 0 80s reviews-v2-556d6457d-xbt8v 1/1 Running 0 80s reviews-v3-564544b4d6-cpmvq 1/1 Running 0 80s
  3. Erstellen Sie eine Datei mit dem Namen my-ingress.yaml und dem folgenden Inhalt. Das folgende Beispiel verwendet die service.beta.kubernetes.io/aws-load-balancer-type: "external" Anmerkung, um zu verhindern, dass der AWS Legacy-Cloud-Anbieter einen Classic Load Balancer für den Service des Typs erstellt LoadBalancer , den Cilium für die Ingress-Ressource erstellt.

    apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: my-ingress namespace: default annotations: service.beta.kubernetes.io/aws-load-balancer-type: "external" spec: ingressClassName: cilium rules: - http: paths: - backend: service: name: details port: number: 9080 path: /details pathType: Prefix
  4. Wenden Sie die Ingress-Ressource auf Ihren Cluster an.

    kubectl apply -f my-ingress.yaml
  5. Bestätigen Sie, dass die Ingress-Ressource und der entsprechende Service erstellt wurden. In diesem Stadium wird erwartet, dass das ADDRESS Feld der Ingress-Ressource nicht mit einer IP-Adresse oder einem Hostnamen gefüllt ist und dass dem gemeinsamen oder dedizierten Dienst vom Typ LoadBalancer für die Ingress-Ressource ebenfalls keine IP-Adresse oder kein Hostname zugewiesen wurde.

    kubectl get ingress my-ingress
    NAME CLASS HOSTS ADDRESS PORTS AGE my-ingress cilium * 80 8s

    Für Load-Balancer-Modus shared

    kubectl -n kube-system get svc cilium-ingress
    NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE cilium-ingress LoadBalancer 172.16.217.48 <pending> 80:32359/TCP,443:31090/TCP 10m

    Für Load-Balancer-Modus dedicated

    kubectl -n default get svc cilium-ingress-my-ingress
    NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE cilium-ingress-my-ingress LoadBalancer 172.16.193.15 <pending> 80:32088/TCP,443:30332/TCP 25s
  6. Fahren Sie fort, Art des Dienstes LoadBalancer um die Ingress-Ressource so zu konfigurieren, dass sie eine vom Cilium Load Balancer IPAM zugewiesene IP-Adresse verwendet, und/oder um die Ingress-Ressource so Host-Netzwerk zu konfigurieren, dass sie Netzwerkadressen verwendet Art des Dienstes NodePort NodePort oder hostet.

Art des Dienstes LoadBalancer

Vorhandene Load-Balancer-Infrastruktur

Standardmäßig erstellt Cilium sowohl für Cilium Ingress als auch für Cilium Gateway Kubernetes-Dienste des Typs LoadBalancer für die Ingress-/Gateway-Ressourcen. Die Attribute der von Cilium erstellten Service(s) können über die Ingress- und Gateway-Ressourcen konfiguriert werden. Wenn Sie Ingress- oder Gateway-Ressourcen erstellen, werden die extern verfügbar gemachten IP-Adressen oder Host-Namen für Ingress oder Gateway von der Load Balancer-Infrastruktur zugewiesen, die normalerweise von einem Ingress- oder Gateway-Controller bereitgestellt wird.

Viele Ingress- und Gateway-Controller verwenden Annotationen, um die Load-Balancer-Infrastruktur zu erkennen und zu konfigurieren. Die Annotationen für diese Ingress- und Gateway-Controller werden auf den Ingress- oder Gateway-Ressourcen konfiguriert, wie in den vorherigen Beispielen oben gezeigt. Informationen zu den unterstützten Annotationen finden Sie in der Dokumentation Ihres Ingress- oder Gateway-Controllers. Eine Liste gängiger Controller finden Sie in der Kubernetes-Ingress-Dokumentation und der Kubernetes-Gateway-Dokumentation.

Wichtig

Cilium Ingress und Gateway können nicht mit dem Load AWS Balancer Controller und AWS Network Load Balancers (NLBs) mit EKS-Hybridknoten verwendet werden. Der Versuch, diese zusammen zu verwenden, führt zu nicht registrierten Zielen, da der NLB versucht, eine direkte Verbindung zu dem Pod herzustellen, der den Service des Typs unterstützt IPs , LoadBalancer wenn der NLB auf eingestellt target-type ist ip (Voraussetzung für die Verwendung von NLB mit Workloads, die auf EKS-Hybridknoten ausgeführt werden).

Keine Load-Balancer-Infrastruktur

Wenn Sie in Ihrer Umgebung keine Load Balancer-Infrastruktur und keinen entsprechenden Ingress-/Gateway-Controller haben, LoadBalancer können Ingress-/Gateway-Ressourcen und entsprechende Dienste des Typs so konfiguriert werden, dass sie IP-Adressen verwenden, die vom Load Balancer IP Address Management (LB IPAM) von Cilium zugewiesen wurden. Cilium LB IPAM kann mit bekannten IP-Adressbereichen aus Ihrer lokalen Umgebung konfiguriert werden und kann die integrierte BGP-Unterstützung (Border Gateway Protocol) von Cilium oder L2-Ankündigungen verwenden, um die LoadBalancer IP-Adressen in Ihrem lokalen Netzwerk bekannt zu geben.

Das folgende Beispiel zeigt, wie Sie das LB IPAM von Cilium mit einer IP-Adresse für Ihre Ingress-/Gateway-Ressourcen konfigurieren und wie Sie die Cilium BGP Control Plane so konfigurieren, dass die LoadBalancer IP-Adresse im lokalen Netzwerk bekannt gegeben wird. Das LB-IPAM-Feature von Cilium ist standardmäßig aktiviert, wird jedoch erst nach der Erstellung einer CiliumLoadBalancerIPPool-Ressource aktiviert.

Voraussetzungen

Verfahren

  1. Patchen Sie optional die Ingress- oder Gateway-Ressource, um eine bestimmte IP-Adresse anzufordern, die für den Dienst vom Typ verwendet werden soll. LoadBalancer Wenn Sie keine bestimmte IP-Adresse anfordern, weist Cilium im nächsten Schritt eine IP-Adresse aus dem in der CiliumLoadBalancerIPPool-Ressource konfigurierten IP-Adressbereich zu. Ersetzen Sie die Befehle in den folgenden Befehlen LB_IP_ADDRESS durch die IP-Adresse, um den Dienst des Typs LoadBalancer anzufordern.

    Gateway

    kubectl patch gateway -n default my-gateway --type=merge -p '{ "spec": { "addresses": [{"type": "IPAddress", "value": "LB_IP_ADDRESS"}] } }'

    Ingress

    kubectl patch ingress my-ingress --type=merge -p '{ "metadata": {"annotations": {"lbipam.cilium.io/ips": "LB_IP_ADDRESS"}} }'
  2. Erstellen Sie eine Datei mit dem Namen cilium-lbip-pool-ingress.yaml mit einer CiliumLoadBalancerIPPool-Ressource, um den IP-Adressbereich des Load Balancers für Ihre Ingress-/Gateway-Ressourcen zu konfigurieren.

    • Wenn Sie Cilium Ingress verwenden, wendet Cilium das cilium.io/ingress: "true"-Label automatisch auf die Services an, die es für Ingress-Ressourcen erstellt. Sie können dieses Label im Feld serviceSelector der CiliumLoadBalancerIPPool-Ressourcendefinition verwenden, um die für LB IPAM geeigneten Services auszuwählen.

    • Wenn Sie Cilium-Gateway verwenden, können Sie das gateway.networking.k8s.io/gateway-name-Label in den Feldern serviceSelector der CiliumLoadBalancerIPPool-Ressourcendefinition verwenden, um die für LB IPAM geeigneten Gateway-Ressourcen auszuwählen.

    • Ersetzen Sie LB_IP_CIDR durch den IP-Adressbereich, der für die IP-Adressen des Load Balancers verwendet werden soll. Um eine einzelne IP-Adresse auszuwählen, verwenden Sie ein /32 CIDR. Weitere Informationen finden Sie unter LoadBalancer IP-Adressverwaltung in der Cilium-Dokumentation.

      apiVersion: cilium.io/v2alpha1 kind: CiliumLoadBalancerIPPool metadata: name: bookinfo-pool spec: blocks: - cidr: "LB_IP_CIDR" serviceSelector: # if using Cilium Gateway matchExpressions: - { key: gateway.networking.k8s.io/gateway-name, operator: In, values: [ my-gateway ] } # if using Cilium Ingress matchLabels: cilium.io/ingress: "true"
  3. Wenden Sie die CiliumLoadBalancerIPPool-Ressource auf Ihren Cluster an.

    kubectl apply -f cilium-lbip-pool-ingress.yaml
  4. Bestätigen Sie, dass von Cilium LB IPAM eine IP-Adresse für die Ingress-/Gateway-Ressource zugewiesen wurde.

    Gateway

    kubectl get gateway my-gateway
    NAME CLASS ADDRESS PROGRAMMED AGE my-gateway cilium LB_IP_ADDRESS True 6m41s

    Ingress

    kubectl get ingress my-ingress
    NAME CLASS HOSTS ADDRESS PORTS AGE my-ingress cilium * LB_IP_ADDRESS 80 10m
  5. Erstellen Sie eine Datei cilium-bgp-advertisement-ingress.yaml mit dem Namen einer CiliumBGPAdvertisement Ressource, um die LoadBalancer IP-Adresse für die Ingress-/Gateway-Ressourcen bekannt zu geben. Wenn Sie Cilium BGP nicht verwenden, können Sie diesen Schritt überspringen. Die für Ihre Ingress-/Gateway-Ressource verwendete LoadBalancer IP-Adresse muss in Ihrem lokalen Netzwerk routingfähig sein, damit Sie den Dienst im nächsten Schritt abfragen können.

    apiVersion: cilium.io/v2alpha1 kind: CiliumBGPAdvertisement metadata: name: bgp-advertisement-lb-ip labels: advertise: bgp spec: advertisements: - advertisementType: "Service" service: addresses: - LoadBalancerIP selector: # if using Cilium Gateway matchExpressions: - { key: gateway.networking.k8s.io/gateway-name, operator: In, values: [ my-gateway ] } # if using Cilium Ingress matchLabels: cilium.io/ingress: "true"
  6. Wenden Sie die CiliumBGPAdvertisement-Ressource auf Ihren Cluster an.

    kubectl apply -f cilium-bgp-advertisement-ingress.yaml
  7. Greifen Sie über die von Cilium LB IPAM zugewiesene IP-Adresse auf den Service zu.

    curl -s http://LB_IP_ADDRESS:80/details/1 | jq
    { "id": 1, "author": "William Shakespeare", "year": 1595, "type": "paperback", "pages": 200, "publisher": "PublisherA", "language": "English", "ISBN-10": "1234567890", "ISBN-13": "123-1234567890" }

Art des Dienstes NodePort

Wenn Sie in Ihrer Umgebung keine Load Balancer-Infrastruktur und keinen entsprechenden Ingress-Controller haben oder wenn Sie Ihre Load Balancer-Infrastruktur selbst verwalten oder DNS-basierten Load Balancing verwenden, können Sie Cilium Ingress so konfigurieren, dass Services vom Typ „Services“ für die Ingress-Ressourcen erstellt werden. NodePort Bei Verwendung NodePort mit Cilium Ingress wird der Typ Service auf einem Port auf jedem Knoten im Portbereich NodePort 30000-32767 verfügbar gemacht. In diesem Modus wird der Datenverkehr, wenn er einen Knoten im Cluster auf dem erreicht NodePort, an einen Pod weitergeleitet, der den Dienst unterstützt. Dieser kann sich auf demselben Knoten oder einem anderen Knoten befinden.

Voraussetzungen

Verfahren

  1. Patchen Sie die bestehende Ingress-Ressource, um sie vom my-ingress Diensttyp in zu ändern. LoadBalancer NodePort

    kubectl patch ingress my-ingress --type=merge -p '{ "metadata": {"annotations": {"ingress.cilium.io/service-type": "NodePort"}} }'

    Falls Sie die Ingress-Ressource noch nicht erstellt haben, können Sie sie erstellen, indem Sie die folgende Ingress-Definition auf Ihren Cluster anwenden. Beachten Sie, dass die folgende Ingress-Definition die in Cilium Ingress bereitstellen beschriebene Istio-Bookinfo-Beispielanwendung verwendet.

    apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: my-ingress namespace: default annotations: service.beta.kubernetes.io/aws-load-balancer-type: "external" "ingress.cilium.io/service-type": "NodePort" spec: ingressClassName: cilium rules: - http: paths: - backend: service: name: details port: number: 9080 path: /details pathType: Prefix
  2. Vergewissern Sie sich, dass der Dienst für die Ingress-Ressource aktualisiert wurde, sodass er den Diensttyp verwendet. NodePort Notieren Sie sich den Port für das HTTP-Protokoll in der Ausgabe. Im folgenden Beispiel lautet dieser HTTP-Port 32353 und wird in einem späteren Schritt zur Abfrage des Services verwendet. Der Vorteil der Verwendung von Cilium Ingress mit dem Typ Service NodePort besteht darin, dass Sie pfad- und hostbasiertes Routing sowie Netzwerkrichtlinien für den eingehenden Datenverkehr anwenden können, was bei einem Standarddienst vom Typ ohne Ingress nicht möglich ist. NodePort

    kubectl -n default get svc cilium-ingress-my-ingress
    NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE cilium-ingress-my-ingress NodePort 172.16.47.153 <none> 80:32353/TCP,443:30253/TCP 27m
  3. Rufen Sie die IP-Adressen Ihrer Knoten in Ihrem Cluster ab.

    kubectl get nodes -o wide
    NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME mi-026d6a261e355fba7 Ready <none> 23h v1.32.3-eks-473151a 10.80.146.150 <none> Ubuntu 22.04.5 LTS 5.15.0-142-generic containerd://1.7.27 mi-082f73826a163626e Ready <none> 23h v1.32.3-eks-473151a 10.80.146.32 <none> Ubuntu 22.04.4 LTS 5.15.0-142-generic containerd://1.7.27 mi-09183e8a3d755abf6 Ready <none> 23h v1.32.3-eks-473151a 10.80.146.33 <none> Ubuntu 22.04.4 LTS 5.15.0-142-generic containerd://1.7.27 mi-0d78d815980ed202d Ready <none> 23h v1.32.3-eks-473151a 10.80.146.97 <none> Ubuntu 22.04.4 LTS 5.15.0-142-generic containerd://1.7.27 mi-0daa253999fe92daa Ready <none> 23h v1.32.3-eks-473151a 10.80.146.100 <none> Ubuntu 22.04.4 LTS 5.15.0-142-generic containerd://1.7.27
  4. Greifen Sie NodePort mithilfe der IP-Adressen Ihrer Knoten und der oben erfassten IP-Adressen auf den Typ Service of Type zu. NodePort Im folgenden Beispiel lautet die verwendete Knoten-IP-Adresse 10.80.146.32 und die NodePort ist32353. Ersetzen Sie diese durch die Werte für Ihre Umgebung.

    curl -s http://10.80.146.32:32353/details/1 | jq
    { "id": 1, "author": "William Shakespeare", "year": 1595, "type": "paperback", "pages": 200, "publisher": "PublisherA", "language": "English", "ISBN-10": "1234567890", "ISBN-13": "123-1234567890" }

Host-Netzwerk

Ähnlich wie beim Typ Service können Sie Cilium Ingress und Cilium Gateway so konfigurieren NodePort, dass Ingress- und Gateway-Ressourcen direkt im Host-Netzwerk verfügbar sind, wenn Sie nicht über eine Load Balancer-Infrastruktur und einen Ingress- oder Gateway-Controller verfügen oder wenn Sie Ihren Lastenausgleich mit einem externen Load Balancer selbst verwalten. Wenn der Host-Netzwerkmodus für eine Ingress- oder Gateway-Ressource aktiviert ist, werden der Diensttyp LoadBalancer und die NodePort Modi automatisch deaktiviert. Der Host-Netzwerkmodus schließt sich mit diesen alternativen Modi für jede Ingress- oder Gateway-Ressource gegenseitig aus. Im Vergleich zum NodePort Service-of-Type-Modus bietet der Host-Netzwerkmodus zusätzliche Flexibilität in Bezug auf den Bereich der Ports, die verwendet werden können (er ist nicht auf den NodePort Bereich 30000-32767 beschränkt), und Sie können eine Untergruppe von Knoten konfigurieren, auf denen die Envoy-Proxys im Host-Netzwerk ausgeführt werden.

Voraussetzungen

Verfahren

Gateway

  1. Erstellen Sie eine Datei mit dem Namen cilium-gateway-host-network.yaml und dem folgenden Inhalt.

    gatewayAPI: enabled: true hostNetwork: enabled: true # uncomment to restrict nodes where Envoy proxies run on the host network # nodes: # matchLabels: # role: gateway
  2. Wenden Sie die Cilium Gateway-Konfiguration des Host-Netzwerks auf Ihren Cluster an.

    helm upgrade cilium oci://public.ecr.aws/eks/cilium/cilium \ --namespace kube-system \ --reuse-values \ --set operator.rollOutPods=true \ -f cilium-gateway-host-network.yaml

    Wenn Sie die Gateway-Ressource noch nicht erstellt haben, können Sie sie erstellen, indem Sie die folgende Gateway-Definition auf Ihren Cluster anwenden. Die nachfolgende Gateway-Definition verwendet die in Cilium Gateway bereitstellen beschriebene Istio-Bookinfo-Beispielanwendung. Im folgenden Beispiel ist die Gateway-Ressource so konfiguriert, dass sie den 8111-Port für den HTTP-Listener verwendet, den gemeinsamen Listener-Port für die im Host-Netzwerk ausgeführten Envoy-Proxys. Wenn Sie einen bevorzugten Port (unter 1023) für die Gateway-Ressource verwenden, finden Sie Anweisungen dazu in der Cilium-Dokumentation.

    --- apiVersion: gateway.networking.k8s.io/v1 kind: Gateway metadata: name: my-gateway spec: gatewayClassName: cilium listeners: - protocol: HTTP port: 8111 name: web-gw allowedRoutes: namespaces: from: Same --- apiVersion: gateway.networking.k8s.io/v1 kind: HTTPRoute metadata: name: http-app-1 spec: parentRefs: - name: my-gateway namespace: default rules: - matches: - path: type: PathPrefix value: /details backendRefs: - name: details port: 9080

    Mit dem folgenden Befehl können Sie die angewendete Cilium-Envoy-Konfiguration anzeigen.

    kubectl get cec cilium-gateway-my-gateway -o yaml

    Mit dem folgenden Befehl können Sie den Envoy-Listener-Port für den cilium-gateway-my-gateway-Service abrufen. In diesem Beispiel lautet der gemeinsame Listener-Port 8111.

    kubectl get cec cilium-gateway-my-gateway -o jsonpath={.spec.services[0].ports[0]}
  3. Rufen Sie die IP-Adressen Ihrer Knoten in Ihrem Cluster ab.

    kubectl get nodes -o wide
    NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME mi-026d6a261e355fba7 Ready <none> 23h v1.32.3-eks-473151a 10.80.146.150 <none> Ubuntu 22.04.5 LTS 5.15.0-142-generic containerd://1.7.27 mi-082f73826a163626e Ready <none> 23h v1.32.3-eks-473151a 10.80.146.32 <none> Ubuntu 22.04.4 LTS 5.15.0-142-generic containerd://1.7.27 mi-09183e8a3d755abf6 Ready <none> 23h v1.32.3-eks-473151a 10.80.146.33 <none> Ubuntu 22.04.4 LTS 5.15.0-142-generic containerd://1.7.27 mi-0d78d815980ed202d Ready <none> 23h v1.32.3-eks-473151a 10.80.146.97 <none> Ubuntu 22.04.4 LTS 5.15.0-142-generic containerd://1.7.27 mi-0daa253999fe92daa Ready <none> 23h v1.32.3-eks-473151a 10.80.146.100 <none> Ubuntu 22.04.4 LTS 5.15.0-142-generic containerd://1.7.27
  4. Greifen Sie über die IP-Adressen Ihrer Knoten und den Listener-Port für die cilium-gateway-my-gateway-Ressource auf den Service zu. Im nachfolgenden Beispiel lautet die verwendete Knoten-IP-Adresse 10.80.146.32 und der Listener-Port 8111. Ersetzen Sie diese durch die Werte für Ihre Umgebung.

    curl -s http://10.80.146.32:8111/details/1 | jq
    { "id": 1, "author": "William Shakespeare", "year": 1595, "type": "paperback", "pages": 200, "publisher": "PublisherA", "language": "English", "ISBN-10": "1234567890", "ISBN-13": "123-1234567890" }

Ingress

Aufgrund eines vorgelagerten Cilium-Problems (#34028) erfordert Cilium Ingress im Host-Netzwerkmodus die Verwendung von loadbalancerMode: shared, wodurch ein einzelner Service vom Typ ClusterIP für alle Ingress-Ressourcen im Cluster erstellt wird. Wenn Sie einen bevorzugten Port (unter 1023) für die Ingress-Ressource verwenden, finden Sie Anweisungen dazu in der Cilium-Dokumentation.

  1. Erstellen Sie eine Datei mit dem Namen cilium-ingress-host-network.yaml und dem folgenden Inhalt.

    ingressController: enabled: true loadbalancerMode: shared # This is a workaround for the upstream Cilium issue service: externalTrafficPolicy: null type: ClusterIP hostNetwork: enabled: true # ensure the port does not conflict with other services on the node sharedListenerPort: 8111 # uncomment to restrict nodes where Envoy proxies run on the host network # nodes: # matchLabels: # role: ingress
  2. Wenden Sie die Cilium Ingress-Konfiguration des Host-Netzwerks auf Ihren Cluster an.

    helm upgrade cilium oci://public.ecr.aws/eks/cilium/cilium \ --namespace kube-system \ --reuse-values \ --set operator.rollOutPods=true \ -f cilium-ingress-host-network.yaml

    Falls Sie die Ingress-Ressource noch nicht erstellt haben, können Sie sie erstellen, indem Sie die folgende Ingress-Definition auf Ihren Cluster anwenden. Die nachfolgende Ingress-Definition verwendet die in Cilium Ingress bereitstellen beschriebene Istio-Bookinfo-Beispielanwendung.

    apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: my-ingress namespace: default spec: ingressClassName: cilium rules: - http: paths: - backend: service: name: details port: number: 9080 path: /details pathType: Prefix

    Mit dem folgenden Befehl können Sie die angewendete Cilium-Envoy-Konfiguration anzeigen.

    kubectl get cec -n kube-system cilium-ingress -o yaml

    Mit dem folgenden Befehl können Sie den Envoy-Listener-Port für den cilium-ingress-Service abrufen. In diesem Beispiel lautet der gemeinsame Listener-Port 8111.

    kubectl get cec -n kube-system cilium-ingress -o jsonpath={.spec.services[0].ports[0]}
  3. Rufen Sie die IP-Adressen Ihrer Knoten in Ihrem Cluster ab.

    kubectl get nodes -o wide
    NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME mi-026d6a261e355fba7 Ready <none> 23h v1.32.3-eks-473151a 10.80.146.150 <none> Ubuntu 22.04.5 LTS 5.15.0-142-generic containerd://1.7.27 mi-082f73826a163626e Ready <none> 23h v1.32.3-eks-473151a 10.80.146.32 <none> Ubuntu 22.04.4 LTS 5.15.0-142-generic containerd://1.7.27 mi-09183e8a3d755abf6 Ready <none> 23h v1.32.3-eks-473151a 10.80.146.33 <none> Ubuntu 22.04.4 LTS 5.15.0-142-generic containerd://1.7.27 mi-0d78d815980ed202d Ready <none> 23h v1.32.3-eks-473151a 10.80.146.97 <none> Ubuntu 22.04.4 LTS 5.15.0-142-generic containerd://1.7.27 mi-0daa253999fe92daa Ready <none> 23h v1.32.3-eks-473151a 10.80.146.100 <none> Ubuntu 22.04.4 LTS 5.15.0-142-generic containerd://1.7.27
  4. Greifen Sie über die IP-Adressen Ihrer Knoten und das sharedListenerPort für die cilium-ingress-Ressource auf den Service zu. Im nachfolgenden Beispiel lautet die verwendete Knoten-IP-Adresse 10.80.146.32 und der Listener-Port 8111. Ersetzen Sie diese durch die Werte für Ihre Umgebung.

    curl -s http://10.80.146.32:8111/details/1 | jq
    { "id": 1, "author": "William Shakespeare", "year": 1595, "type": "paperback", "pages": 200, "publisher": "PublisherA", "language": "English", "ISBN-10": "1234567890", "ISBN-13": "123-1234567890" }