为 Google Distributed Cloud 配置外部 IP 地址

Google Distributed Cloud 上的默认 Cloud Service Mesh 安装假定为 LoadBalancer 服务自动分配外部 IP 地址。在 Google Distributed Cloud 中并非如此。因此,您需要分配一个或多个外部 IP 地址,具体取决于您的服务网格配置:

  • Cloud Service Mesh 入站流量网关资源的一个外部 IP 地址,例如您的客户用于从互联网访问工作负载的网关。
  • 如果集群存在于服务网格的不同网络中,则需另一个供集群相互通信的外部 IP 地址。这称为东-西网关。

配置入站流量网关 IP 地址

如需为入站流量网关配置外部 IP 地址,请遵循以下部分之一,具体取决于 Google Distributed Cloud 负载均衡模式

    集成模式

  1. 使用入站流量网关的外部 IP 地址修补 istio-ingressgateway 服务的配置:
    kubectl patch svc istio-ingressgateway -n istio-system --type='json' -p '[{"op": "add", "path": "/spec/loadBalancerIP", "value": "INGRESS_GATEWAY_IP"}]'
  2. 手动模式

  3. 在 shell 中查看 istio-ingressgateway Service 的配置:
    kubectl get svc -n istio-system istio-ingressgateway -o yaml
    系统会显示 Cloud Service Mesh 网关的每个端口。命令输出如下所示:
      ...
      ports:
      - name: status-port
        nodePort: 30391
        port: 15020
        protocol: TCP
        targetPort: 15020
      - name: http2
        nodePort: 31380
        port: 80
        protocol: TCP
        targetPort: 80
      - name: https
        nodePort: 31390
        port: 443
        protocol: TCP
        targetPort: 443
      - name: tcp
        nodePort: 31400
        port: 31400
        protocol: TCP
        targetPort: 31400
      - name: https-kiali
        nodePort: 31073
        port: 15029
        protocol: TCP
        targetPort: 15029
      - name: https-prometheus
        nodePort: 30253
        port: 15030
        protocol: TCP
        targetPort: 15030
      - name: https-grafana
        nodePort: 30050
        port: 15031
        protocol: TCP
        targetPort: 15031
      - name: https-tracing
        nodePort: 31204
        port: 15032
        protocol: TCP
        targetPort: 15032
      - name: tls
        nodePort: 30158
        port: 15443
        protocol: TCP
        targetPort: 15443
      ...
  4. 通过负载均衡器公开这些端口。

    例如,名为 http2 的服务端口具有 port 80 和 nodePort 31380。假设您的用户集群的节点地址是 192.168.0.10192.168.0.11192.168.0.12,并且负载均衡器的 VIP 地址是 203.0.113.1

    配置负载均衡器以将发送到 203.0.113.1:80 的流量转发到 192.168.0.10:31380192.168.0.11:31380192.168.0.12:31380。您可以选择要在此给定 VIP 地址上公开的服务端口。

确认已为入站流量网关分配一个外部 IP 地址。可能会有短暂的延迟,要求您重复此命令,直到您看到所需的结果:

kubectl --context="${CTX_CLUSTER1}" get svc istio-ingressgateway -n istio-system

预期输出为:

NAME                    TYPE           CLUSTER-IP    EXTERNAL-IP    PORT(S)   AGE
istio-ingressgateway   LoadBalancer   10.80.6.124   34.75.71.237   ...       51s

配置东-西网关 IP 地址

如需为东西向网关配置外部 IP 地址,请遵循以下部分之一,具体取决于 Google Distributed Cloud 负载均衡模式

    集成模式

  1. 使用东-西网关的外部 IP 地址修补 istio-eastwestgateway 服务的配置:
    kubectl patch svc istio-eastwestgateway -n istio-system --type='json' -p '[{"op": "add", "path": "/spec/loadBalancerIP", "value": "EAST_WEST_GATEWAY_IP"}]'
  2. 手动模式

  3. 在 shell 中查看 istio-eastwestgateway Service 的配置:
    kubectl get svc -n istio-system istio-eastwestgateway -o yaml
    系统会显示 Cloud Service Mesh 网关的每个端口。命令输出如下所示:
      ports:
      - name: status-port
        nodePort: 31781
        port: 15021
        protocol: TCP
        targetPort: 15021
      - name: tls
        nodePort: 30498
        port: 15443
        protocol: TCP
        targetPort: 15443
      - name: tls-istiod
        nodePort: 30879
        port: 15012
        protocol: TCP
        targetPort: 15012
      - name: tls-webhook
        nodePort: 30336
        port: 15017
        protocol: TCP
        targetPort: 15017
      ...
  4. 通过负载均衡器公开这些端口。

    例如,名为 http2 的服务端口具有 port 80 和 nodePort 31380。假设您的用户集群的节点地址是 192.168.0.10192.168.0.11192.168.0.12,并且负载均衡器的 VIP 地址是 203.0.113.1

    配置负载均衡器以将发送到 203.0.113.1:80 的流量转发到 192.168.0.10:31380192.168.0.11:31380192.168.0.12:31380。您可以选择要在此给定 VIP 地址上公开的服务端口。

确认已为东-西网关分配一个外部 IP 地址。可能会有短暂的延迟,要求您运行/重复此命令,直到您看到所需的结果:

kubectl --context="${CTX_CLUSTER1}" get svc istio-eastwestgateway -n istio-system

预期输出为:

NAME                    TYPE           CLUSTER-IP    EXTERNAL-IP    PORT(S)   AGE
istio-eastwestgateway   LoadBalancer   10.80.6.124   34.75.71.237   ...       51s

后续步骤