Configurar endereços IP externo para o Google Distributed Cloud com os balanceadores de carga F5 BIG-IP

A instalação padrão do Cloud Service Mesh no Google Distributed Cloud pressupõe que os endereços IP externos são alocados automaticamente para serviços LoadBalancer. Isso não é verdade para o Google Distributed Cloud com balanceadores de carga F5 BIG-IP. Por isso, você precisa alocar um ou mais endereços IP externos, dependendo da configuração da malha de serviço:

  • Um endereço IP externo para o recurso de gateway de entrada do Cloud Service Mesh, por como o gateway usado pelos clientes para acessar as cargas de trabalho na Internet.
  • Outro endereço IP externo para que os clusters se comuniquem entre eles se existirem em redes diferentes na sua malha de serviço. Isso é conhecido como gateway leste-oeste.

Como configurar o endereço IP do gateway de entrada

Para configurar um endereço IP externo para o gateway de entrada, use as instruções em uma das seções a seguir, dependendo do modo de balanceamento de carga do Google Distributed Cloud:

    Modo integrado

  1. Corrija a configuração do serviço istio-ingressgateway com o endereço IP externo para o gateway de entrada:
    kubectl patch svc istio-ingressgateway -n istio-system --type='json' -p '[{"op": "add", "path": "/spec/loadBalancerIP", "value": "INGRESS_GATEWAY_IP"}]'
  2. Modo manual

  3. Veja a configuração do serviço istio-ingressgateway no shell:
    kubectl get svc -n istio-system istio-ingressgateway -o yaml
    Cada uma das portas dos gateways do Cloud Service Mesh é exibida. A resposta ao comando é semelhante ao exemplo abaixo:
      ...
      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. Exponha essas portas pelo balanceador de carga.

    Por exemplo, a porta de serviço chamada http2 tem port 80 e nodePort 31380. Suponha que os endereços de nó do cluster de usuário sejam 192.168.0.10, 192.168.0.11 e 192.168.0.12, e o VIP do balanceador de carga seja 203.0.113.1.

    Configure o balanceador de carga para que o tráfego enviado para 203.0.113.1:80 seja encaminhado para 192.168.0.10:31380, 192.168.0.11:31380 ou 192.168.0.12:31380. É possível selecionar as portas de serviço que quer expor nesse VIP.

Confirme se o gateway de entrada recebeu um endereço IP externo. Pode haver um pequeno atraso que exija a repetição desse comando até que você veja o resultado esperado:

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

A resposta esperada é:

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

Como configurar o endereço IP do gateway east-west

Para configurar um endereço IP externo para o gateway leste-oeste, use as instruções em uma das seções a seguir, dependendo do seu modo de balanceamento de carga do Google Distributed Cloud:

    Modo integrado

  1. Corrija a configuração do serviço istio-eastwestgateway com o endereço IP externo para o gateway leste-oeste:
    kubectl patch svc istio-eastwestgateway -n istio-system --type='json' -p '[{"op": "add", "path": "/spec/loadBalancerIP", "value": "EAST_WEST_GATEWAY_IP"}]'
  2. Modo manual

  3. Veja a configuração do serviço istio-eastwestgateway no shell:
    kubectl get svc -n istio-system istio-eastwestgateway -o yaml
    Cada uma das portas dos gateways do Cloud Service Mesh é exibida. A resposta ao comando é semelhante ao exemplo abaixo:
      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. Exponha essas portas pelo balanceador de carga.

    Por exemplo, a porta de serviço chamada http2 tem port 80 e nodePort 31380. Suponha que os endereços de nó do cluster de usuário sejam 192.168.0.10, 192.168.0.11 e 192.168.0.12, e o VIP do balanceador de carga seja 203.0.113.1.

    Configure o balanceador de carga para que o tráfego enviado para 203.0.113.1:80 seja encaminhado para 192.168.0.10:31380, 192.168.0.11:31380 ou 192.168.0.12:31380. É possível selecionar as portas de serviço que quer expor nesse VIP.

Confirme se o gateway leste-oeste recebeu um endereço IP externo. Pode haver um pequeno atraso que exija a repetição desse comando até que você veja o resultado esperado:

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

A resposta esperada é:

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

A seguir