Hilf mit, diese Seite zu verbessern
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.
Wenn Sie zu diesem Benutzerhandbuch beitragen möchten, 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.
Kubernetes Ingress für Hybridknoten konfigurieren
In diesem Thema wird beschrieben, wie Kubernetes Ingress für Workloads konfiguriert wird, die auf Amazon EKS-Hybridknoten 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, basiert auf der Quelle des Anwendungsdatenverkehrs. 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 Load AWS Balancer Controller und den Application Load Balancer (ALB) mit dem Zieltyp ip
für Workloads verwenden, die auf Hybridknoten ausgeführt werden. Bei Verwendung des ip
Zieltyps leitet ALB den Datenverkehr direkt an die Pods weiter und umgeht dabei den Netzwerkpfad der Service-Schicht. Damit ALB die Pod-IP-Ziele auf Hybridknoten erreichen kann, muss Ihr lokales Pod-CIDR in Ihrem lokalen 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 Webhooks für Hybridknoten konfigurieren.
Überlegungen
-
Installieren Sie den AWS Load Balancer Controller mit HelmWeitere Informationen zu AWS Application Load Balancer und Load Balancer Controller finden AWS Sie unter Weiterleiten von Anwendungs- und HTTP-Verkehr mit Application Load Balancers 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 unter installiert. CNI für Hybridknoten konfigurieren
-
Die Cilium BGP Control Plane wurde gemäß den Anweisungen unter aktiviert. Cilium BGP für Hybridknoten konfigurieren Wenn Sie BGP nicht verwenden möchten, müssen Sie eine alternative Methode verwenden, um Ihren lokalen Pod in Ihrem lokalen Netzwerk CIDRs routingfähig zu machen. Wenn Sie Ihren lokalen Pod nicht CIDRs routingfähig machen, kann ALB Ihre Pod-IP-Ziele nicht registrieren oder kontaktieren.
-
Helm ist in Ihrer Befehlszeilenumgebung installiert. Weitere Informationen finden Sie in den Anweisungen zur Einrichtung von Helm.
-
eksctl ist in Ihrer Befehlszeilenumgebung installiert. Weitere Informationen finden Sie in den eksctl-Installationsanweisungen.
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 eks-charts Helm-Chart-Repository hinzu und aktualisieren Sie Ihr lokales Helm-Repository, um sicherzustellen, dass Sie über die neuesten Diagramme verfügen.
helm repo add eks https://aws.github.io/eks-charts
helm 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 Load Balancer Balancer-Controller folgen.-
Sie finden die neueste Version des Helm-Diagramms, indem Sie Folgendes ausführen
helm search repo eks/aws-load-balancer-controller --versions
: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
-
-
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
-
Erstellen Sie eine Beispielanwendung. Im folgenden Beispiel wird die Microservices-Beispielanwendung Istio Bookinfo
verwendet. 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.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
-
Wenden Sie die Ingress-Konfiguration auf Ihren Cluster an.
kubectl apply -f my-ingress-alb.yaml
-
Die Bereitstellung des ALB für Ihre Ingress-Ressource kann einige Minuten dauern. Sobald das ALB bereitgestellt ist, wird Ihrer Ingress-Ressource eine Adresse zugewiesen, die dem DNS-Namen der ALB-Bereitstellung entspricht. Die Adresse wird das Format haben.
<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
-
Greifen Sie über die ALB-Adresse auf den Service zu.
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" }
Überblick über Cilium Ingress und Cilium Gateway
Die Ingress-Funktionen von Cilium sind in die Architektur von Cilium integriert und können mit der 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-Funktionen von Cilium aktivieren, gleicht der Cilium-Operator Ingress-/Gateway-Objekte im Cluster ab, und Envoy-Proxys auf jedem Knoten verarbeiten den Layer-7-Netzwerkverkehr (L7). Cilium stellt die Ingress-/Gateway-Infrastruktur wie Load Balancer nicht direkt bereit. Wenn Sie planen, Cilium Ingress /Gateway mit einem Load Balancer zu verwenden, 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-Verkehr kümmert sich Cilium um den Kernnetzverkehr und die Durchsetzung der L3/L4-Richtlinien, und integrierte Envoy-Proxys verarbeiten den L7-Netzwerkverkehr. Bei Cilium Ingress/Gateway ist Envoy für die Anwendung der L7-Routing-Regeln und -Richtlinien und die Bearbeitung von Anfragen, für das erweiterte Datenverkehrsmanagement wie die Aufteilung und Spiegelung des Datenverkehrs sowie für die Terminierung und Herkunft von TLS 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 von Cilium Ingress und Gateway
In der folgenden Tabelle sind die Funktionen von Cilium Ingress und Cilium Gateway ab Cilium Version 1.17.x zusammengefasst.
Funktion | Ingress | Gateway |
---|---|---|
Art des Dienstes LoadBalancer |
Ja |
Ja |
Art der Dienstleistung NodePort |
Ja |
Keine1 |
Host-Netzwerk |
Ja |
Ja |
Gemeinsamer Load Balancer |
Ja |
Ja |
Dedizierter Load Balancer |
Ja |
Nein 2 |
Netzwerkrichtlinien |
Ja |
Ja |
Protokolle |
Schicht 7 (HTTP (S), gRPC) |
Schicht 7 (HTTP (S), gRPC) 3 |
TLS-Passthrough |
Ja |
Ja |
Verwaltung des Datenverkehrs |
Pfad- und Host-Routing |
Pfad- und Host-Routing, URL-Umleitung und -Umschreibung, Aufteilung des Datenverkehrs, Header-Änderung |
1 Cilium Gateway-Unterstützung für NodePort Dienste ist für Cilium Version 1.18.x geplant (#27273)
2 Cilium Gateway-Unterstützung für dedizierte Load Balancer (#25567)
3 Cilium Gateway-Unterstützung für TCP/UDP (#21929)
Installieren Sie Cilium Gateway
Überlegungen
-
Cilium muss mit der
nodePort.enabled
Einstellung auf konfiguriert werden,true
wie in den folgenden Beispielen gezeigt. Wenn Sie die Kube-Proxy-Ersatzfunktion von Cilium verwenden, müssen Sie nicht auf einstellen.nodePort.enabled
true
-
Cilium muss mit der
envoy.enabled
Einstellung auf konfiguriert werden,true
wie in den folgenden Beispielen gezeigt. -
Cilium Gateway kann im Load Balancer- (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. Host-Netzwerk Weitere Informationen finden Sie unter.
Voraussetzungen
-
Helm ist in Ihrer Befehlszeilenumgebung installiert. Weitere Informationen finden Sie in den Anweisungen zur Einrichtung von Helm.
-
Cilium wurde gemäß den Anweisungen unter installiert. CNI für Hybridknoten konfigurieren
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.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 Proxycilium-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
-
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
-
Vergewissern Sie sich, dass die Cilium-Pods Operator, Agent und Envoy laufen.
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
Konfigurieren Sie Cilium Gateway
Cilium Gateway wird für Gateway-Objekte aktiviert, indem Sie auf setzen. gatewayClassName
cilium
Der Service, den Cilium für Gateway-Ressourcen erstellt, kann mit Feldern im Gateway-Objekt konfiguriert werden. Allgemeine Anmerkungen, die von Gateway-Controllern zur Konfiguration der Load Balancer-Infrastruktur verwendet werden, können mit dem Feld des Gateway-Objekts konfiguriert werden. infrastructure
Bei Verwendung von LoadBalancer IPAM von Cilium (siehe Beispiel unterArt des Dienstes LoadBalancer) LoadBalancer kann die IP-Adresse, die für den Typ Service verwendet werden soll, im Feld des Gateway-Objekts konfiguriert werden. addresses
Weitere Informationen zur Gateway-Konfiguration finden Sie in der Kubernetes
apiVersion: gateway.networking.k8s.io/v1 kind: Gateway metadata: name: my-gateway spec: gatewayClassName: cilium infrastructure: annotations: service.beta.kubernetes.io/... service.kuberentes.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 folgenden Stellen Sie Cilium Gateway bereit Abschnitt und in den Beispielen in der Cilium-Dokumentation
.
Stellen Sie Cilium Gateway bereit
-
Erstellen Sie eine Beispielanwendung. Im folgenden Beispiel wird die Microservices-Beispielanwendung Istio Bookinfo
verwendet. kubectl apply -f https://raw.githubusercontent.com/istio/istio/refs/heads/master/samples/bookinfo/platform/kube/bookinfo.yaml
-
Vergewissern Sie sich, 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
-
Erstellen Sie eine Datei mit dem Namen
my-gateway.yaml
und 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
-
Vergewissern Sie sich, dass die Gateway-Ressource und der entsprechende Dienst erstellt wurden. Zu diesem Zeitpunkt wird erwartet, dass das
ADDRESS
Feld der Gateway-Ressource nicht mit einer IP-Adresse oder einem Hostnamen gefüllt ist und dass dem Dienst 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
-
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
Installieren Sie Cilium Ingress
Überlegungen
-
Cilium muss mit der
nodePort.enabled
Einstellung auf konfiguriert werden,true
wie in den folgenden Beispielen gezeigt. Wenn Sie die Kube-Proxy-Ersatzfunktion von Cilium verwenden, müssen Sie nicht auf einstellen.nodePort.enabled
true
-
Cilium muss mit der
envoy.enabled
Einstellung auf konfiguriert werden,true
wie in den folgenden Beispielen gezeigt. -
Bei
ingressController.loadbalancerMode
Einstellung aufdedicated
erstellt Cilium spezielle Dienste für jede Ingress-Ressource. BeiingressController.loadbalancerMode
Einstellung aufshared
erstellt Cilium einen gemeinsamen Dienst des Typs LoadBalancer für alle Ingress-Ressourcen im Cluster. Bei Verwendung desshared
Load Balancer-ModusloadBalancerIP
werden die Einstellungen für den gemeinsamen Dienst wielabels
,annotations
type
, und imingressController.service
Abschnitt der Helm-Werte konfiguriert. Weitere Informationen finden Sie in der Referenz zu den Cilium Helm-Werten. -
Wenn diese
ingressController.default
Option auf gesetzt isttrue
, wird Cilium als Standard-Ingress-Controller für den Cluster konfiguriert und erstellt Ingress-Einträge, auch wenn dies in den Ingress-Ressourcen nicht angegebeningressClassName
ist. -
Cilium Ingress kann im Load Balancer- (Standard), Node-Port- oder Host-Netzwerkmodus bereitgestellt werden. Wenn Cilium im Host-Netzwerkmodus installiert wird, sind die Modi Service of Type LoadBalancer und Service of Type NodePort deaktiviert. Weitere Informationen finden Sie unter Host-Netzwerk.
-
service.beta.kubernetes.io/aws-load-balancer-type: "external"
In den Helm-Werten immeringressController.service.annotations
auf gesetzt, um zu verhindern, dass der AWS Legacy-Cloud-Anbieter einen Classic Load Balancer für dencilium-ingress
Standardservice erstellt, der durch das Cilium Helm-Diagrammerstellt wurde.
Voraussetzungen
-
Cilium wurde gemäß den Anweisungen unter installiert. CNI für Hybridknoten konfigurieren
Verfahren
-
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 Loaddedicated
Balancer-Modus verwendet und dass ein separater Proxycilium-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
-
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
-
Vergewissern Sie sich, dass die Cilium-Pods Operator, Agent und Envoy laufen.
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
Konfigurieren Sie Cilium Ingress
Cilium Ingress wird für Ingress-Objekte aktiviert, indem Sie auf setzen. ingressClassName
cilium
Die Dienste, die Cilium für Ingress-Ressourcen erstellt, können mit Anmerkungen zu den Ingress-Objekten konfiguriert werden, wenn der Load Balancer-Modus verwendet wird, und in der Cilium/Helm-Konfiguration, wenn der dedicated
Load Balancer-Modus verwendet wird. shared
Diese Anmerkungen werden häufig von Ingress-Controllern verwendet, um die Load Balancer-Infrastruktur oder andere Attribute des Dienstes wie Diensttyp, Load Balancer-Modus, Ports und TLS-Passthrough zu konfigurieren. Die wichtigsten Anmerkungen werden im Folgenden beschrieben. Eine vollständige Liste der unterstützten Anmerkungen finden Sie in den Anmerkungen zu Cilium Ingress in der Cilium-Dokumentation.
Anmerkung | Beschreibung |
---|---|
|
|
|
|
|
|
|
Liste der IP-Adressen, die von Cilium IPAM zugewiesen werden sollen LoadBalancer |
Cilium und die Kubernetes Ingress-Spezifikation unterstützen exakte, präfixe und implementierungsspezifische Abgleichsregeln für Ingress-Pfade. Cilium unterstützt Regex als implementierungsspezifische Abgleichsregel. Weitere Informationen finden Sie unter Ingress-Pfadtypen und Rangfolge und
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.kuberentes.io/... service.kuberentes.io/... spec: ingressClassName: cilium rules: ...
Stellen Sie Cilium Ingress bereit
-
Erstellen Sie eine Beispielanwendung. Im folgenden Beispiel wird die Microservices-Beispielanwendung Istio Bookinfo
verwendet. kubectl apply -f https://raw.githubusercontent.com/istio/istio/refs/heads/master/samples/bookinfo/platform/kube/bookinfo.yaml
-
Vergewissern Sie sich, 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
-
Erstellen Sie eine Datei mit dem Namen
my-ingress.yaml
und 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 Dienst erstellt wurden. Zu diesem Zeitpunkt wird erwartet, dass das
ADDRESS
Feld der Ingress-Ressource nicht mit einer IP-Adresse oder einem Hostnamen gefüllt ist und dass dem gemeinsam genutzten 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 den 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 den 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
-
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
Bestehende 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 Dienste, die Cilium erstellt, können über die Ingress- und Gateway-Ressourcen konfiguriert werden. Wenn Sie Ingress- oder Gateway-Ressourcen erstellen, werden die extern offengelegten IP-Adressen oder Hostnamen für den Ingress oder das Gateway von der Load Balancer-Infrastruktur zugewiesen, die normalerweise von einem Ingress- oder Gateway-Controller bereitgestellt wird.
Viele Ingress- und Gateway-Controller verwenden Anmerkungen, um die Load Balancer-Infrastruktur zu erkennen und zu konfigurieren. Die Anmerkungen für diese Ingress- und Gateway-Controller werden auf den Ingress- oder Gateway-Ressourcen konfiguriert, wie in den vorherigen Beispielen oben gezeigt. Die unterstützten Anmerkungen finden Sie in der Dokumentation Ihres Ingress- oder Gateway-Controllers. Eine Liste der gängigen Controller finden Sie in der Kubernetes Ingress-Dokumentation und der Kubernetes
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. Die LB IPAM-Funktion von Cilium ist standardmäßig aktiviert, wird jedoch erst aktiviert, wenn eine Ressource erstellt wurde. CiliumLoadBalancerIPPool
Voraussetzungen
-
Cilium Ingress oder Gateway wurde gemäß den Anweisungen unter oder installiert. Installieren Sie Cilium Ingress Installieren Sie Cilium Gateway
-
Cilium Ingress- oder Gateway-Ressourcen mit Beispielanwendung, die gemäß den Anweisungen in oder bereitgestellt wurde. Stellen Sie Cilium Ingress bereit Stellen Sie Cilium Gateway bereit
-
Die Cilium BGP Control Plane wurde gemäß den Anweisungen unter aktiviert. Cilium BGP für Hybridknoten konfigurieren Wenn Sie BGP nicht verwenden möchten, können Sie diese Voraussetzung überspringen. Sie können jedoch 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 nachfolgenden Schritt eine IP-Adresse aus dem in der
CiliumLoadBalancerIPPool
Ressource konfigurierten IP-Adressbereich zu. Ersetzen Sie die Befehle in den folgenden BefehlenLB_IP_ADDRESS
durch die IP-Adresse, um den Dienst vom Typ anzufordern. LoadBalancerGateway
kubectl patch gateway -n default my-gateway --type=merge -p '{ "spec": { "addresses": [{"type": "IPAddress", "value": "LB_IP_ADDRESS"}] } }'
Zutritt
kubectl patch ingress my-ingress --type=merge -p '{ "metadata": {"annotations": {"lbipam.cilium.io/ips": "LB_IP_ADDRESS"}} }'
-
Erstellen Sie eine Datei
cilium-lbip-pool-ingress.yaml
mit dem Namen einerCiliumLoadBalancerIPPool
Ressource, um den Load Balancer-IP-Adressbereich für Ihre Ingress-/Gateway-Ressourcen zu konfigurieren.-
Wenn Sie Cilium Ingress verwenden, wendet Cilium das
cilium.io/ingress: "true"
Label automatisch auf die Dienste an, die es für Ingress-Ressourcen erstellt. Sie können dieses Label imserviceSelector
Feld derCiliumLoadBalancerIPPool
Ressourcendefinition verwenden, um die Dienste auszuwählen, die für LB IPAM in Frage kommen. -
Wenn Sie Cilium Gateway verwenden, können Sie die
gateway.networking.k8s.io/gateway-name
Bezeichnung in denserviceSelector
Feldern derCiliumLoadBalancerIPPool
Ressourcendefinition verwenden, um die Gateway-Ressourcen auszuwählen, die für LB IPAM in Frage kommen. -
LB_IP_CIDR
Ersetzen Sie durch den IP-Adressbereich, der für die Load Balancer-IP-Adressen verwendet werden soll. Verwenden Sie einen/32
CIDR, um eine einzelne IP-Adresse auszuwählen. 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
-
Vergewissern Sie sich, 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 6m41sZutritt
kubectl get ingress my-ingress
NAME CLASS HOSTS ADDRESS PORTS AGE my-ingress cilium *
LB_IP_ADDRESS
80 10m -
Erstellen Sie eine Datei
cilium-bgp-advertisement-ingress.yaml
mit dem Namen einerCiliumBGPAdvertisement
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"
-
Wenden Sie die
CiliumBGPAdvertisement
Ressource auf Ihren Cluster an.kubectl apply -f cilium-bgp-advertisement-ingress.yaml
-
Greifen Sie mit der von Cilium LB IPAM zugewiesenen IP-Adresse auf den Dienst 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 unter installiert. Installieren Sie Cilium Ingress
-
Cilium Ingress-Ressourcen mit Beispielanwendung, die gemäß den Anweisungen unter bereitgestellt wurde. Stellen Sie Cilium Ingress bereit
Verfahren
-
Patchen Sie die vorhandene Ingress-Ressource
my-ingress
, um sie vom Diensttyp in zu ändern. LoadBalancer NodePortkubectl patch ingress my-ingress --type=merge -p '{ "metadata": {"annotations": {"ingress.cilium.io/service-type": "NodePort"}} }'
Wenn Sie die Ingress-Ressource 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 unter beschriebene Istio Bookinfo-Beispielanwendung verwendet. Stellen Sie Cilium Ingress bereit
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 Beispiel unten ist dies dieser HTTP-Port
32353
, der in einem nachfolgenden Schritt zur Abfrage des Dienstes verwendet wird. Der Vorteil der Verwendung von Cilium Ingress mit Service of type NodePort besteht darin, dass Sie pfad- und hostbasiertes Routing sowie Netzwerkrichtlinien für den eingehenden Verkehr anwenden können, was bei einem Standarddienst vom Typ ohne Ingress nicht möglich ist. NodePortkubectl -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
-
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
-
Greifen NodePort Sie mithilfe der IP-Adressen Ihrer Knoten und der oben NodePort erfassten IP-Adressen auf den Typ Service des Typs zu. 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
-
Cilium Ingress oder Gateway wurden gemäß den Anweisungen in oder installiert. Installieren Sie Cilium Ingress Installieren Sie Cilium Gateway
Verfahren
Gateway
-
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
-
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 nicht erstellt haben, können Sie sie erstellen, indem Sie die folgende Gateway-Definition auf Ihren Cluster anwenden. Die folgende Gateway-Definition verwendet die unter beschriebene Istio Bookinfo-Beispielanwendung. Stellen Sie Cilium Gateway bereit Im folgenden Beispiel ist die Gateway-Ressource so konfiguriert, dass sie den
8111
Port für den HTTP-Listener verwendet, der der gemeinsam genutzte Listener-Port für die Envoy-Proxys ist, die im Host-Netzwerk ausgeführt werden. Wenn Sie einen privilegierten Port (niedriger als 1023) für die Gateway-Ressource verwenden, finden Sie Anweisungen 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
Sie können die angewandte Cilium Envoy-Konfiguration mit dem folgenden Befehl überprüfen.
kubectl get cec cilium-gateway-my-gateway -o yaml
Sie können den Envoy-Listener-Port für den
cilium-gateway-my-gateway
Dienst mit dem folgenden Befehl abrufen. In diesem Beispiel lautet der gemeinsam genutzte Listener-Port.8111
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 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
-
Greifen Sie über die IP-Adressen Ihrer Knoten und den Listener-Port für die
cilium-gateway-my-gateway
Ressource auf den Dienst zu. Im folgenden Beispiel wird die IP-Adresse des Knotens10.80.146.32
und der Listener-Port verwendet.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 Upstream-Problems mit Cilium (#34028loadbalancerMode: shared
, wodurch ein einziger Service vom Typ ClusterIP für alle Ingress-Ressourcen im Cluster erstellt wird. Wenn Sie einen privilegierten Port (niedriger als 1023) für die Ingress-Ressource verwenden, finden Sie Anweisungen in der Cilium-Dokumentation.
-
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
-
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
Wenn Sie die Ingress-Ressource nicht erstellt haben, können Sie sie erstellen, indem Sie die folgende Ingress-Definition auf Ihren Cluster anwenden. Die folgende Ingress-Definition verwendet die unter beschriebene Istio Bookinfo-Beispielanwendung. Stellen Sie Cilium Ingress bereit
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
Sie können die angewandte Cilium Envoy-Konfiguration mit dem folgenden Befehl beobachten.
kubectl get cec -n kube-system cilium-ingress -o yaml
Sie können den Envoy-Listener-Port für den
cilium-ingress
Dienst mit dem folgenden Befehl abrufen. In diesem Beispiel lautet der gemeinsam genutzte Listener-Port.8111
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 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
-
Greifen Sie über die IP-Adressen Ihrer Knoten und die
sharedListenerPort
für diecilium-ingress
Ressource auf den Dienst zu. Im folgenden Beispiel wird die IP-Adresse des Knotens10.80.146.32
und der Listener-Port verwendet8111
. 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" }