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
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.
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
-
Installieren Sie den AWS Load Balancer Controller mit HelmWeitere Informationen zu AWS Application Load Balancer und Load Balancer Controller finden AWS Sie unter Anwendungen und HTTP-Datenverkehr mit Application Load Balancers weiterleiten und.
-
Informationen zur Auswahl zwischen AWS Application Load Balancer und AWS Network Load Balancer finden Sie unter Best Practices for Load Balancer.
-
Eine Liste der Anmerkungen, die mit Application Load AWS Balancer für Ingress-Ressourcen konfiguriert werden können, finden Sie unter Load Balancer Controller
Ingress Annotations. AWS
Voraussetzungen
-
Cilium wurde gemäß den Anweisungen in CNI für Hybridknoten konfigurieren installiert.
-
Cilium-BGP-Steuerebene gemäß den Anweisungen in Konfiguration von Cilium BGP für Hybridknoten aktiviert. Wenn Sie BGP nicht verwenden möchten, müssen Sie eine alternative Methode verwenden, um Ihren lokalen Pod in Ihrem lokalen Netzwerk routingfähig zu machen. CIDRs Wenn Sie Ihren lokalen Pod nicht CIDRs routingfähig machen, kann ALB Ihre Pod-IP-Ziele nicht registrieren oder kontaktieren.
-
Weitere Informationen finden Sie in den Anweisungen zur Einrichtung von Helm.
-
eksctl ist in Ihrer Befehlszeilenumgebung installiert. Weitere Informationen finden Sie in den Installationsanweisungen für eksctl.
Verfahren
-
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 -
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 -
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 -
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-chartshelm repo update eks -
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 --versionsausführen.helm install aws-load-balancer-controller eks/aws-load-balancer-controller \ -n kube-system \ --versionAWS_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
-
-
Stellen Sie sicher, dass der AWS Load Balancer Controller erfolgreich installiert wurde.
kubectl get -n kube-system deployment aws-load-balancer-controllerNAME READY UP-TO-DATE AVAILABLE AGE aws-load-balancer-controller 2/2 2 2 84s -
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 -
Erstellen Sie eine Datei mit dem Namen
my-ingress-alb.yamlund 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 -
Wenden Sie die Ingress-Konfiguration auf Ihren Cluster an.
kubectl apply -f my-ingress-alb.yaml -
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.rproxy.goskope.com.kubectl get ingress my-ingressNAME CLASS HOSTS ADDRESS PORTS AGE my-ingress alb * my-ingress-alb-<random-string>.<region>.elb.amazonaws.com 80 23m -
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
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
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.enabledauftruekonfiguriert werden, wie in den folgenden Beispielen dargestellt. Wenn Sie das kube-proxy-Ersatz-Feature von Cilium verwenden, müssen SienodePort.enablednicht auftruesetzen. -
Cilium muss mit
envoy.enabledauftruekonfiguriert 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
-
Helm ist in Ihrer Befehlszeilenumgebung installiert. Weitere Informationen finden Sie unter Anweisungen zur Einrichtung von Helm.
-
Cilium wurde gemäß den Anweisungen in CNI für Hybridknoten konfigurieren installiert.
Verfahren
-
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 -
Erstellen Sie eine Datei mit dem Namen
cilium-gateway-values.yamlund den folgenden Inhalten. Im folgenden Beispiel wird Cilium Gateway so konfiguriert, dass es den standardmäßigen Load Balancer-Modus verwendet und dass ein separater Proxycilium-envoyDaemonSet 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 -
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 -
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=ciliumNAME 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
-
Eine Liste der verfügbaren Felder finden HTTPRoute
Sie in den GRPCRoute Spezifikationen. -
Informationen zur Verwendung und Konfiguration dieser Ressourcen finden Sie in den Beispielen im nachfolgenden Cilium Gateway bereitstellen-Abschnitt und in der Cilium-Dokumentation
.
Cilium Gateway bereitstellen
-
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 -
Bestätigen Sie, dass die Anwendung erfolgreich ausgeführt wird.
kubectl get podsNAME 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 -
Erstellen Sie eine Datei mit dem Namen
my-gateway.yamlund dem folgenden Inhalt. Das folgende Beispiel verwendet dieservice.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 -
Wenden Sie die Gateway-Ressource auf Ihren Cluster an.
kubectl apply -f my-gateway.yaml -
Bestätigen Sie, dass die Gateway-Ressource und der entsprechende Service erstellt wurden. In diesem Stadium wird erwartet, dass das
ADDRESSFeld 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-gatewayNAME CLASS ADDRESS PROGRAMMED AGE my-gateway cilium True 10skubectl get svc cilium-gateway-my-gatewayNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE cilium-gateway-my-gateway LoadBalancer 172.16.227.247 <pending> 80:30912/TCP 24s -
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.enabledauftruekonfiguriert werden, wie in den folgenden Beispielen dargestellt. Wenn Sie das kube-proxy-Ersatz-Feature von Cilium verwenden, müssen SienodePort.enablednicht auftruesetzen. -
Cilium muss mit
envoy.enabledauftruekonfiguriert werden, wie in den folgenden Beispielen dargestellt. -
Wenn
ingressController.loadbalancerModeaufdedicatedgesetzt ist, erstellt Cilium dedizierte Services für jede Ingress-Ressource. Wenn dieseingressController.loadbalancerModeOption auf gesetzt istshared, erstellt Cilium einen gemeinsamen Dienst des Typs LoadBalancer für alle Ingress-Ressourcen im Cluster. Bei Verwendung desshared-Load-Balancer-Modus werden die Einstellungen für den gemeinsam genutzten Service wielabels,annotations,typeundloadBalancerIPimingressController.service-Abschnitt der Helm-Werte konfiguriert. Weitere Informationen finden Sie in der Wertereferenz von Cilium Helm. -
Wenn
ingressController.defaultauftruegesetzt ist, wird Cilium als Standard-Ingress-Controller für den Cluster konfiguriert und erstellt Ingress-Einträge, auch wenningressClassNamebei 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 immeringressController.service.annotationsauf gesetzt, um zu verhindern, dass der AWS Legacy-Cloud-Anbieter einen Classic Load Balancer für dencilium-ingressStandardservice erstellt, der durch das Cilium Helm-Diagrammerstellt wurde.
Voraussetzungen
-
Helm ist in Ihrer Befehlszeilenumgebung installiert. Weitere Informationen finden Sie unter Anweisungen zur Einrichtung von Helm.
-
Cilium wurde gemäß den Anweisungen in CNI für Hybridknoten konfigurieren installiert.
Verfahren
-
Erstellen Sie eine Datei mit dem Namen
cilium-ingress-values.yamlund den folgenden Inhalten. Im folgenden Beispiel wird Cilium Ingress so konfiguriert, dass es den standardmäßigen LoaddedicatedBalancer-Modus verwendet und dass ein separater Proxycilium-envoyDaemonSet 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 -
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 -
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=ciliumNAME 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
| Anmerkung | Description |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
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
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
-
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 -
Bestätigen Sie, dass die Anwendung erfolgreich ausgeführt wird.
kubectl get podsNAME 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 -
Erstellen Sie eine Datei mit dem Namen
my-ingress.yamlund dem folgenden Inhalt. Das folgende Beispiel verwendet dieservice.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 -
Wenden Sie die Ingress-Ressource auf Ihren Cluster an.
kubectl apply -f my-ingress.yaml -
Bestätigen Sie, dass die Ingress-Ressource und der entsprechende Service erstellt wurden. In diesem Stadium wird erwartet, dass das
ADDRESSFeld 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-ingressNAME CLASS HOSTS ADDRESS PORTS AGE my-ingress cilium * 80 8sFür Load-Balancer-Modus
sharedkubectl -n kube-system get svc cilium-ingressNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE cilium-ingress LoadBalancer 172.16.217.48 <pending> 80:32359/TCP,443:31090/TCP 10mFür Load-Balancer-Modus
dedicatedkubectl -n default get svc cilium-ingress-my-ingressNAME 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 -
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
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
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
-
Cilium Ingress oder Gateway wurde gemäß den Anweisungen in Cilium Ingress installieren oder Cilium Gateway installieren installiert.
-
Cilium-Ingress- oder Gateway-Ressourcen mit Beispielanwendung bereitgestellt gemäß den Anweisungen in Cilium Ingress bereitstellen oder Cilium Gateway bereitstellen.
-
Cilium-BGP-Steuerebene gemäß den Anweisungen in Konfiguration von Cilium BGP für Hybridknoten aktiviert. Wenn Sie BGP nicht verwenden möchten, können Sie diese Voraussetzung überspringen, aber Sie können erst dann auf Ihre Ingress- oder Gateway-Ressource zugreifen, wenn die von Cilium LB IPAM zugewiesene LoadBalancer IP-Adresse in Ihrem lokalen Netzwerk routingfähig ist.
Verfahren
-
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 BefehlenLB_IP_ADDRESSdurch 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"}} }' -
Erstellen Sie eine Datei mit dem Namen
cilium-lbip-pool-ingress.yamlmit einerCiliumLoadBalancerIPPool-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 FeldserviceSelectorderCiliumLoadBalancerIPPool-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 FeldernserviceSelectorderCiliumLoadBalancerIPPool-Ressourcendefinition verwenden, um die für LB IPAM geeigneten Gateway-Ressourcen auszuwählen. -
Ersetzen Sie
LB_IP_CIDRdurch 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/32CIDR. Weitere Informationen finden Sie unter LoadBalancer IP-Adressverwaltungin 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"
-
-
Wenden Sie die
CiliumLoadBalancerIPPool-Ressource auf Ihren Cluster an.kubectl apply -f cilium-lbip-pool-ingress.yaml -
Bestätigen Sie, dass von Cilium LB IPAM eine IP-Adresse für die Ingress-/Gateway-Ressource zugewiesen wurde.
Gateway
kubectl get gateway my-gatewayNAME CLASS ADDRESS PROGRAMMED AGE my-gateway ciliumLB_IP_ADDRESSTrue 6m41sIngress
kubectl get ingress my-ingressNAME CLASS HOSTS ADDRESS PORTS AGE my-ingress cilium *LB_IP_ADDRESS80 10m -
Erstellen Sie eine Datei
cilium-bgp-advertisement-ingress.yamlmit dem Namen einerCiliumBGPAdvertisementRessource, 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" -
Wenden Sie die
CiliumBGPAdvertisement-Ressource auf Ihren Cluster an.kubectl apply -f cilium-bgp-advertisement-ingress.yaml -
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.
Anmerkung
Voraussetzungen
-
Cilium Ingress wurde gemäß den Anweisungen in Cilium Ingress installieren installiert.
-
Cilium-Ingress-Ressourcen mit Beispielanwendung wurden gemäß den Anweisungen in Cilium Ingress bereitstellen bereitgestellt.
Verfahren
-
Patchen Sie die bestehende Ingress-Ressource, um sie vom
my-ingressDiensttyp in zu ändern. LoadBalancer NodePortkubectl 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 -
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
32353und 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. NodePortkubectl -n default get svc cilium-ingress-my-ingressNAME 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 -
Rufen Sie die IP-Adressen Ihrer Knoten in Ihrem Cluster ab.
kubectl get nodes -o wideNAME 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 -
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.32und 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
-
Cilium Ingress oder Gateway wurde gemäß den Anweisungen in Cilium Ingress installieren oder Cilium Gateway installieren installiert.
Verfahren
Gateway
-
Erstellen Sie eine Datei mit dem Namen
cilium-gateway-host-network.yamlund 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 -
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.yamlWenn 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: 9080Mit dem folgenden Befehl können Sie die angewendete Cilium-Envoy-Konfiguration anzeigen.
kubectl get cec cilium-gateway-my-gateway -o yamlMit 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-Port8111.kubectl get cec cilium-gateway-my-gateway -o jsonpath={.spec.services[0].ports[0]} -
Rufen Sie die IP-Adressen Ihrer Knoten in Ihrem Cluster ab.
kubectl get nodes -o wideNAME 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 -
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-Adresse10.80.146.32und der Listener-Port8111. 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 (#34028loadbalancerMode: 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
-
Erstellen Sie eine Datei mit dem Namen
cilium-ingress-host-network.yamlund 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 -
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.yamlFalls 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: PrefixMit dem folgenden Befehl können Sie die angewendete Cilium-Envoy-Konfiguration anzeigen.
kubectl get cec -n kube-system cilium-ingress -o yamlMit dem folgenden Befehl können Sie den Envoy-Listener-Port für den
cilium-ingress-Service abrufen. In diesem Beispiel lautet der gemeinsame Listener-Port8111.kubectl get cec -n kube-system cilium-ingress -o jsonpath={.spec.services[0].ports[0]} -
Rufen Sie die IP-Adressen Ihrer Knoten in Ihrem Cluster ab.
kubectl get nodes -o wideNAME 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 -
Greifen Sie über die IP-Adressen Ihrer Knoten und das
sharedListenerPortfür diecilium-ingress-Ressource auf den Service zu. Im nachfolgenden Beispiel lautet die verwendete Knoten-IP-Adresse10.80.146.32und der Listener-Port8111. 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" }