Google Distributed Cloud의 외부 IP 주소 구성

Google Distributed Cloud의 기본 Cloud Service Mesh 설치에서는 LoadBalancer 서비스에 외부 IP 주소가 자동으로 할당된다고 가정합니다. Google Distributed Cloud에는 해당하지 않습니다. 이 때문에 서비스 메시 구성에 따라 하나 이상의 외부 IP 주소를 할당해야 합니다.

  • Cloud Service Mesh 인그레스 게이트웨이 리소스의 외부 IP 주소 1개(예: 고객이 인터넷을 통해 워크로드에 액세스하는 데 사용하는 게이트웨이)입니다.
  • 서비스 메시 내의 서로 다른 네트워크에 있는 경우 서로 통신할 수 있도록하는 클러스터의 다른 외부 IP 주소입니다. 이를 east-west 게이트웨이라고 합니다.

인그레스 게이트웨이 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. 셸에서 istio-ingressgateway 서비스의 구성을 확인합니다.
    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.10, 192.168.0.11, 192.168.0.12이고 부하 분산기의 VIP가 203.0.113.1이라고 가정합니다.

    203.0.113.1:80으로 전송된 트래픽이 192.168.0.10:31380, 192.168.0.11:31380 또는 192.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

east-west 게이트웨이 IP 주소 구성

east-west 게이트웨이의 외부 IP 주소를 구성하려면 Google Distributed Cloud 부하 분산 모드에 따라 아래 섹션 중 하나를 수행합니다.

    통합 모드

  1. east-west 게이트웨이의 외부 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. 셸에서 istio-eastwestgateway 서비스의 구성을 확인합니다.
    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.10, 192.168.0.11, 192.168.0.12이고 부하 분산기의 VIP가 203.0.113.1이라고 가정합니다.

    203.0.113.1:80으로 전송된 트래픽이 192.168.0.10:31380, 192.168.0.11:31380 또는 192.168.0.12:31380으로 전달되도록 부하 분산기를 구성합니다. 이 주어진 VIP에 노출할 서비스 포트를 선택할 수 있습니다.

east-west 게이트웨이에 외부 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

다음 단계