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

A instalação predefinida do Cloud Service Mesh no Google Distributed Cloud pressupõe que os endereços IP externos são automaticamente atribuídos aos serviços LoadBalancer. Isto não se aplica ao Google Distributed Cloud com equilibradores de carga F5 BIG-IP. Por este motivo, tem de atribuir um ou mais endereços IP externos, consoante a configuração da malha de serviços:

  • Um endereço IP externo para o recurso de gateway de entrada do Cloud Service Mesh, por exemplo, o gateway que os seus clientes usam para aceder às suas cargas de trabalho a partir da Internet.
  • Outro endereço IP externo para os seus clusters comunicarem entre si, se existirem em redes diferentes na sua malha de serviços. Isto é denominado gateway leste-oeste.

Configurar o endereço IP do gateway de entrada

Para configurar um endereço IP externo para o gateway de entrada, siga as instruções numa das seguintes secções, consoante o seu modo de balanceamento de carga do Google Distributed Cloud:

    Modo integrado

  1. Aplique uma patch à configuração do serviço istio-ingressgateway com o endereço IP externo do 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 na shell:
    kubectl get svc -n istio-system istio-ingressgateway -o yaml
    São apresentadas todas as portas para as gateways do Cloud Service Mesh. O resultado do comando é semelhante ao seguinte:
      ...
      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 estas portas através do equilibrador de carga.

    Por exemplo, a porta de serviço denominada http2 tem port 80 e nodePort 31380. Suponhamos que os endereços dos nós do cluster de utilizadores são 192.168.0.10, 192.168.0.11 e 192.168.0.12, e o VIP do balanceador de carga é 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. Pode selecionar as portas de serviço que quer expor neste VIP específico.

Confirme se foi atribuído um endereço IP externo ao gateway de entrada. Pode haver um ligeiro atraso que exige que repita este comando até ver o resultado esperado:

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

O resultado esperado é:

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

Configurar o endereço IP do gateway de este a oeste

Para configurar um endereço IP externo para o gateway leste-oeste, use as instruções numa das seguintes secções, consoante o seu modo de balanceamento de carga do Google Distributed Cloud:

    Modo integrado

  1. Aplique uma patch à configuração do serviço com o endereço IP externo do gateway leste-oeste:istio-eastwestgateway
    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 na shell:
    kubectl get svc -n istio-system istio-eastwestgateway -o yaml
    São apresentadas todas as portas para as gateways do Cloud Service Mesh. O resultado do comando é semelhante ao seguinte:
      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 estas portas através do equilibrador de carga.

    Por exemplo, a porta de serviço denominada http2 tem port 80 e nodePort 31380. Suponhamos que os endereços dos nós do cluster de utilizadores são 192.168.0.10, 192.168.0.11 e 192.168.0.12, e o VIP do balanceador de carga é 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. Pode selecionar as portas de serviço que quer expor neste VIP específico.

Confirme se foi atribuído um endereço IP externo ao gateway leste-oeste. Pode haver um ligeiro atraso que exige que execute este comando repetidamente até ver o resultado esperado:

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

O resultado esperado é:

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

O que se segue?