Ingress-Gateway mithilfe eines externen Load-Balancers verfügbar machen
Übersicht
Mit Cloud Service Mesh können Sie Ingress-Gateways als Teil Ihres Service Mesh. Sie können das Load-Balancing für Ihren Cluster mit Cloud Service Mesh mithilfe externer Load-Balancer (physische oder Softwarelasten) Balancern außerhalb des Clusters), um Traffic an das Ingress-Gateway zu senden.
Auf dieser Seite erfahren Sie, wie Sie einen externen Load-Balancer mit Cloud Service Mesh konfigurieren. Alternativ können Sie Ingress mit mehreren Back-End-Konfigurationen einrichten
Hinweise
Zum Ausführen der Schritte in diesem Dokument benötigen Sie die folgenden Ressourcen:
Ein Kubernetes-Cluster mit installiertem Cloud Service Mesh.
Einen externen Load Balancer, der auf die Knoten zugreifen kann, auf denen sich Ihr Cluster befindet ausgeführt wird. Sie konfigurieren diesen externen Load-Balancer für eingehenden Traffic. Gateway Ihres Clusters über
External IP Address
.
Umgebung einrichten
Führen Sie die folgenden Befehle auf einer Workstation aus, die auf den Cluster zugreifen kann
die Sie nutzen möchten. Das kubectl
-Tool muss für die Verwendung des
den spezifischen Clusterkontext Ihres Clusters.
Legen Sie die Umgebungsvariablen fest.
export ASM_INGRESSGATEWAY_NAMESPACE=asm-ingressgateway export ASM_INGRESSGATEWAY_DEPLOYMENT_NAME=asm-ingressgateway export ASM_INGRESSGATEWAY_SERVICE_NAME=asm-ingressgateway export ASM_INGRESSGATEWAY_NODE_LABEL=asm-ingressgateway
Legen Sie die
IP address
des externen Load-Balancers fest.export EXTERNAL_LB_IP_ADDRESS=EXTERNAL_LB_IP_ADDRESS
[Optional] Kennzeichnen Sie die Ingress-Gateway-Knoten. Dadurch wird sichergestellt, dass das Gateway auf bestimmten Knoten im Cluster bereitgestellt wird.
kubectl label nodes INGRESSGATEWAY_NODE_IP ${ASM_INGRESSGATEWAY_NODE_LABEL}=
- INGRESSGATEWAY_NODE_IP: Knoten in Ihrer Kubernetes-Umgebung
den das Ingress-Gateway hostet. Führen Sie diesen
kubectl
-Befehl für als Ingress-Knoten haben.
- INGRESSGATEWAY_NODE_IP: Knoten in Ihrer Kubernetes-Umgebung
den das Ingress-Gateway hostet. Führen Sie diesen
Ingress-Gateway erstellen
Erstellen Sie den Namespace. Dieser Namespace wird zum Bereitstellen des eingehenden Traffics verwendet Gateway.
kubectl create namespace ${ASM_INGRESSGATEWAY_NAMESPACE}
Aktivieren Sie den Namespace für die Injection: Die Schritte hängen vom Cloud Service Mesh-Typ ab (verwaltet oder im Cluster).
Verwaltet
Verwenden Sie folgenden Befehl, um die verfügbaren Release-Kanäle zu finden:
kubectl -n istio-system get controlplanerevision
Die Ausgabe sieht in etwa so aus:
NAME AGE asm-managed 6d7h asm-managed-rapid 6d7h
In der Ausgabe ist der Wert in der Spalte
NAME
das Überarbeitungslabel, das der verfügbaren Release-Version für die Cloud Service Mesh-Version entspricht.Wenden Sie das Überarbeitungslabel auf den Namespace an.
kubectl label namespace ${ASM_INGRESSGATEWAY_NAMESPACE} \ istio-injection- istio.io/rev=REVISION_LABEL --overwrite
Clusterintern
Verwenden Sie den folgenden Befehl, um das Überarbeitungslabel für
istiod
zu finden:kubectl get deploy -n istio-system -l app=istiod -o \ jsonpath={.items[*].metadata.labels.'istio\.io\/rev'}'{"\n"}'
Wenden Sie das Überarbeitungslabel auf den Namespace an. Im folgenden Befehl ist
REVISION
der Wert des Überarbeitungslabelsistiod
, den Sie im vorherigen Schritt notiert haben.kubectl label namespace ${ASM_INGRESSGATEWAY_NAMESPACE} \ istio-injection- istio.io/rev=REVISION --overwrite
Wenden Sie die Manifestdatei des Ingress-Gateways an.
kubectl --namespace ${ASM_INGRESSGATEWAY_NAMESPACE} apply --filename https://raw.githubusercontent.com/GoogleCloudPlatform/anthos-service-mesh-samples/main/docs/ingress-gateway-external-lb/ingress-gateway.yaml
Erwartete Ausgabe:
serviceaccount/asm-ingressgateway created role.rbac.authorization.k8s.io/asm-ingressgateway created rolebinding.rbac.authorization.k8s.io/asm-ingressgateway created deployment.apps/asm-ingressgateway created service/asm-ingressgateway created poddisruptionbudget.policy/asm-ingressgateway created horizontalpodautoscaler.autoscaling/asm-ingressgateway created
Patchen Sie den Dienst
ingressgateway
mit der IP-Adresse des externen Load-Balancers.cat <<EOF > asm-external-ip-patch.yaml spec: externalIPs: - ${EXTERNAL_LB_IP_ADDRESS} loadBalancerIP: ${EXTERNAL_LB_IP_ADDRESS} EOF kubectl --namespace ${ASM_INGRESSGATEWAY_NAMESPACE} patch service/${ASM_INGRESSGATEWAY_SERVICE_NAME} --patch "$(cat asm-external-ip-patch.yaml)"
[Optional]
ingressgateway
-Deployment für das Ingress-Gateway patchen Knotenlabel-Affinität.cat <<EOF > asm-ingress-node-label-patch.yaml spec: template: spec: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: ${ASM_INGRESSGATEWAY_NODE_LABEL} operator: Exists EOF kubectl --namespace ${ASM_INGRESSGATEWAY_NAMESPACE} patch deployment/${ASM_INGRESSGATEWAY_DEPLOYMENT_NAME} --patch "$(cat asm-ingress-node-label-patch.yaml)"
Externen Load-Balancer einrichten
In diesem Abschnitt konfigurieren Sie den externen Load-Balancer, mit dem eine Verbindung hergestellt werden soll. das Ingress-Gateway aus dem Cluster an.
Portinformationen des Service
-Ports für eingehenden Traffic abrufen
Rufen Sie die
NodePorts
ab.export HTTP_INGRESS_PORT=$(kubectl --namespace ${ASM_INGRESSGATEWAY_NAMESPACE} get service/${ASM_INGRESSGATEWAY_SERVICE_NAME} --output jsonpath='{.spec.ports[?(@.name=="http2")].nodePort}') export HTTPS_INGRESS_PORT=$(kubectl --namespace ${ASM_INGRESSGATEWAY_NAMESPACE} get service/${ASM_INGRESSGATEWAY_SERVICE_NAME} --output jsonpath='{.spec.ports[?(@.name=="https")].nodePort}') export STATUS_PORT=$(kubectl --namespace ${ASM_INGRESSGATEWAY_NAMESPACE} get service/${ASM_INGRESSGATEWAY_SERVICE_NAME} --output jsonpath='{.spec.ports[?(@.name=="status-port")].nodePort}')
Zeigen Sie die
NodePorts
an.echo HTTP_INGRESS_PORT=${HTTP_INGRESS_PORT} echo HTTPS_INGRESS_PORT=${HTTPS_INGRESS_PORT} echo STATUS_PORT=${STATUS_PORT}
Externes Lastenausgleichsmodul konfigurieren
Verwenden Sie das im vorherigen Schritt angezeigte NodePorts
, um die Konnektivität zu konfigurieren
dem externen Load-Balancer und dem Ingress-Gateway.
Konfigurieren Sie die Systemdiagnose in der Load-Balancer-Konfiguration.
hosts: CLUSTER_NODE_IP Protocol: HTTP Port: STATUS_PORT Path: /healthz/ready
CLUSTER_NODE_IP ist die IP-Adresse der Knoten in Ihrem Kubernetes-Cluster, der das Ingress-Gateway hostet. Diese IP-Adresse muss die über Ihren externen Load-Balancer erreichbar sind. Möglicherweise müssen Sie diese Konfiguration mehrmals, einmal pro Clusterknoten.
STATUS_PORT: ist die
NodePort
, über die der Ingress die Systemstatus-API des Gateways verfügbar gemacht wird. Sie können diese Informationen aus dem vorherigen Schritt. Sie ist für jeden Knoten im Cluster gleich.
Knotenpools in Ihrem Load-Balancer für das Routing von
HTTP
undHTTPS
konfigurieren Zugriffe. Verwenden Sie die folgendeIP:PORT
-Konfiguration für Traffic an Port 80 (HTTP
) und Port 443 (HTTPS
).80 -> CLUSTER_NODE_IP:HTTP_INGRESS_PORT 443 -> CLUSTER_NODE_IP:HTTPS_INGRESS_PORT
CLUSTER_NODE_IP ist die IP-Adresse der Knoten in Ihrem Kubernetes-Cluster, der das Ingress-Gateway hostet. Diese IP-Adresse muss die über Ihren externen Load-Balancer erreichbar sind. Möglicherweise müssen Sie diese Konfiguration mehrmals, einmal pro Clusterknoten.
HTTP_INGRESS_PORT: ist die
NodePort
, über die die wird der HTTP-Traffic des Ingress-Gateways gefährdet. Sie können diese Informationen aus dem vorherigen Schritt. Sie ist für jeden Knoten im Cluster gleich.HTTPS_INGRESS_PORT: ist die
NodePort
, über die die wird der HTTPS-Traffic des Ingress-Gateways gefährdet. Sie können diese Informationen aus dem vorherigen Schritt. Sie ist für jeden Knoten im Cluster gleich.
Stellen Sie zum Prüfen der Einrichtung sicher, dass die Systemdiagnosen Ihres Load-Balancers korrekt sind bestanden werden.