使用外部负载均衡器公开入站流量网关
概览
使用 Cloud Service Mesh 时,您可以将入站流量网关作为服务网格的一部分进行部署和管理。您可以使用外部负载均衡器(集群外部的物理或软件负载均衡器)将流量发送到入站流量网关,从而进一步使用 Cloud Service Mesh 为集群配置负载均衡。
本页介绍了如何使用 Cloud Service Mesh 配置外部负载均衡器。 或者,您可以设置具有多个后端配置的入站流量网关。
准备工作
要完成本文档中的步骤,您需要以下资源:
安装了 Cloud Service Mesh 的 Kubernetes 集群。
可以访问运行集群的节点的外部负载均衡器。您将配置此外部负载均衡器,以通过
External IP Address
作为集群的入站流量网关的前端。
设置您的环境
从可以访问您要使用的集群的工作站运行以下命令。确保 kubectl
工具已配置为使用您的集群特有的集群上下文。
设置环境变量。
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
设置外部负载均衡器的
IP address
。export EXTERNAL_LB_IP_ADDRESS=EXTERNAL_LB_IP_ADDRESS
[可选] 为入站流量网关节点添加标签。这可确保网关部署到集群中的特定节点。
kubectl label nodes INGRESSGATEWAY_NODE_IP ${ASM_INGRESSGATEWAY_NODE_LABEL}=
- INGRESSGATEWAY_NODE_IP 是 Kubernetes 集群中托管入站流量网关的节点。为您的每一个入站流量节点运行此
kubectl
命令。
- INGRESSGATEWAY_NODE_IP 是 Kubernetes 集群中托管入站流量网关的节点。为您的每一个入站流量节点运行此
创建入站流量网关
创建命名空间。此命名空间将用于部署入站流量网关。
kubectl create namespace ${ASM_INGRESSGATEWAY_NAMESPACE}
启用用于注入的命名空间。所需步骤取决于您的 Cloud Service Mesh 类型(代管式或集群内)。
代管式
使用以下命令查找可用的发布渠道:
kubectl -n istio-system get controlplanerevision
输出类似于以下内容:
NAME AGE asm-managed 6d7h asm-managed-rapid 6d7h
在输出中,
NAME
列的值是与 Cloud Service Mesh 版本可用的发布版本对应的修订版本标签。将修订版本标签应用于命名空间:
kubectl label namespace ${ASM_INGRESSGATEWAY_NAMESPACE} \ istio-injection- istio.io/rev=REVISION_LABEL --overwrite
集群内
使用以下命令查找
istiod
的修订版本标签:kubectl get deploy -n istio-system -l app=istiod -o \ jsonpath={.items[*].metadata.labels.'istio\.io\/rev'}'{"\n"}'
将修订版本标签应用于命名空间。在以下命令中,
REVISION
是您在上一步中记下的istiod
修订版本标签的值。kubectl label namespace ${ASM_INGRESSGATEWAY_NAMESPACE} \ istio-injection- istio.io/rev=REVISION --overwrite
应用入站流量网关清单文件。
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
预期输出:
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
使用外部负载均衡器 IP 地址修补
ingressgateway
服务。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)"
[可选] 修补
ingressgateway
部署以实现入站流量网关节点标签亲和性。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)"
设置外部负载均衡器
在本部分中,您将配置外部负载均衡器,以从集群连接到入站流量网关。
提取入站流量网关 Service
端口信息
获取
NodePorts
。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}')
显示
NodePorts
。echo HTTP_INGRESS_PORT=${HTTP_INGRESS_PORT} echo HTTPS_INGRESS_PORT=${HTTPS_INGRESS_PORT} echo STATUS_PORT=${STATUS_PORT}
配置外部负载均衡器
使用上一步中显示的 NodePorts
配置外部负载均衡器和入站流量网关之间的连接。
在负载均衡器配置中配置健康检查。
hosts: CLUSTER_NODE_IP Protocol: HTTP Port: STATUS_PORT Path: /healthz/ready
CLUSTER_NODE_IP 是 Kubernetes 集群中托管入站流量网关的节点的 IP 地址。此 IP 地址必须可从外部负载均衡器访问。您需要为每个集群节点设置一次此配置,因此可能需要进行多次设置。
STATUS_PORT:公开入站流量网关的健康状况 API 需要使用的
NodePort
。您可以从上一步中复制此信息。此信息对于集群中的每个节点都是相同的。
在负载均衡器中配置用于路由
HTTP
和HTTPS
流量的节点池。对端口 80 (HTTP
) 和端口 443 (HTTPS
) 的流量使用以下IP:PORT
配置。80 -> CLUSTER_NODE_IP:HTTP_INGRESS_PORT 443 -> CLUSTER_NODE_IP:HTTPS_INGRESS_PORT
CLUSTER_NODE_IP 是 Kubernetes 集群中托管入站流量网关的节点的 IP 地址。此 IP 地址必须可从外部负载均衡器访问。您需要为每个集群节点设置一次此配置,因此可能需要进行多次设置。
HTTP_INGRESS_PORT:公开入站流量网关的 HTTP 流量需要使用的
NodePort
。您可以从上一步中复制此信息。此信息对于集群中的每个节点都是相同的。HTTPS_INGRESS_PORT:公开入站流量网关的 HTTPS 流量需要使用的
NodePort
。您可以从上一步中复制此信息。此信息对于集群中的每个节点都是相同的。
如需验证设置,请确保负载均衡器上的健康检查都通过。
后续步骤
- 详细了解安装和升级网关