Trabalhando com o Istio como um Complemento de Cluster para implementar a API do Kubernetes Gateway

Descubra como instalar, configurar e usar o complemento de cluster do Istio para implementar a API do Kubernetes Gateway em clusters que você criou usando o Kubernetes Engine (OKE).

A API do Gateway do Kubernetes (API do Gateway) é o padrão de última geração para gerenciar o tráfego de entrada e rede em clusters do Kubernetes, sucedendo à API de Entrada. Para obter mais informações sobre a API do Gateway, consulte API do Gateway na documentação do Kubernetes e a documentação da API do Gateway.

O complemento de cluster do Istio é uma extensão gerenciada pela Oracle para o Kubernetes Engine que implanta e gerencia o plano de controle do Istio em um cluster. Ele permite malha de serviços avançada e suporte à API do Gateway para entrada e gerenciamento de tráfego.

Ao ativar o complemento de cluster do Istio, você pode usar o Istio como o controlador subjacente para gerenciar Gateway, HTTPRoute e outros recursos da API do Gateway.

O uso do Istio como um complemento de cluster (o complemento de cluster do Istio) simplifica o gerenciamento do ciclo de vida do plano de controle (istiod). Você pode mais simplesmente:

  • Ative ou desative o plano de controle Istio.
  • Admita e desative atualizações automáticas de versão pela Oracle.
  • Gerencie personalizações específicas de complementos usando argumentos de configuração de par de chave/valor aprovados.

Estas seções descrevem como trabalhar com o complemento de cluster Istio para configurar a rede de API do Gateway:

Pré-requisitos

Antes de configurar o complemento de cluster do Istio para suportar a API do Kubernetes Gateway:

  • Você deve ter acesso kubectl ao cluster criado pelo Kubernetes Engine.
  • Você deve ter privilégios de administrador de cluster para instalar definições de recursos personalizados (CRDs) e controladores.

Configurando o Complemento de Cluster do Istio como um Controlador de API do Gateway

Etapas de alto nível para configurar o complemento de cluster do Istio como um controlador de API do Gateway

Em um nível superior, as etapas para configurar o complemento de cluster Istio para servir como controlador de API do Gateway são as seguintes:

Etapa 1: Instalar CRDs de API do Gateway

As Definições de Recursos Personalizados (CRDs) da API do Gateway não são instaladas por padrão nos clusters que você cria usando o Kubernetes Engine. Antes de usar o Istio como controlador de API do Gateway, instale os CRDs.

  1. Instale os CRDs de API do Gateway (v1.2.0) padrão digitando:

    kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.2.0/standard-install.yaml
    
  2. Verifique se o CRD está instalado digitando:

    kubectl get crd gateways.gateway.networking.k8s.io
    
  3. Confirme se a CRD está listada na saída.
  4. Confirme se a release da API do Kubernetes Gateway é compatível com a versão complementar do Istio suportada pelo Kubernetes Engine para a versão do Kubernetes em execução no cluster (consulte Comparações - v1.2 na documentação da API do Gateway e Versões Suportadas do Complemento do Cluster).

Etapa 2: Criar o arquivo de configuração do complemento do cluster Istio

Crie um arquivo de configuração de complemento de cluster do Istio para uso com a CLI do OCI.

  1. Crie um arquivo JSON (por exemplo, enableistio.json).

  2. Adicione o conteúdo a seguir para ativar a extensão.

    Observação: Ao contrário do caso de uso padrão da Malha de Serviços, você não precisa definir estritamente o enableIngressGateway legado porque a API do Gateway pode provisionar dinamicamente a infraestrutura do gateway. No entanto, defini-lo fornece um fallback padrão.

    {
        "addonName": "Istio",
        "configurations": [
            {
                "key": "enableIngressGateway",
                "value": "false"
            }
        ]
    }
    

    Observe os pontos a seguir:

    • Se você definir value como "true", o complemento de cluster do Istio provisionará a implantação e o serviço clássicos do istio-ingressgateway ao lado do plano de controle.
    • Se você definir value como "false", somente o plano de controle (istiod) será instalado. Em seguida, você pode criar recursos Gateway que o Istio provisionará automaticamente conforme necessário.
  3. Salve e feche o arquivo.

Etapa 3: Implantar o complemento de cluster do Istio no cluster e confirmar uma implantação bem-sucedida

Implante o complemento de cluster do Istio.

  1. Implante o complemento usando a CLI do OCI digitando:

    oci ce cluster install-addon --addon-name Istio --cluster-id <cluster-ocid> --from-json file://enableistio.json
    
  2. Verifique a implantação bem-sucedida:

    1. Informar:

      oci ce cluster list-addons --cluster-id <cluster-ocid>
      
    2. Confirme se o estado do ciclo de vida do complemento de cluster do Istio é ACTIVE.

  3. Verifique se o plano de controle Istio está em execução:

    1. Informar:

      kubectl get pods -n istio-system
      
    2. Confirme se o pod istiod está no estado Running.

Etapa 4: Criar um Gateway

Crie o recurso Gateway.

  1. Crie um novo namespace (por exemplo, test-gateway) digitando:
    kubectl create namespace test-gateway
  2. Crie um arquivo chamado gateway.yaml com o conteúdo a seguir.

    apiVersion: gateway.networking.k8s.io/v1
    kind: Gateway
    metadata:
      name: my-gateway
      namespace: test-gateway
      annotations:
        # OCI specific annotation for Network Load Balancer (Layer 4)
        oci.oraclecloud.com/load-balancer-type: "nlb"
    spec:
      gatewayClassName: istio
      listeners:
      - name: http
        port: 80
        protocol: HTTP
        allowedRoutes:
          namespaces:
            from: Same
    

    Observe a linha gatewayClassName: istio, que informa ao complemento de cluster do Istio para gerenciar esse gateway.

  3. Crie a Gateway digitando:

    kubectl apply -f gateway.yaml
    
  4. Obtenha o endereço IP externo digitando:

    kubectl get gateway -n test-gateway
    

    O OCI pode levar alguns minutos para provisionar o balanceador de carga.

    Aguarde até que a coluna PROGRAMMED contenha True e um endereço IP seja exibido na coluna ADDRESS.

Etapa 5: Implantar um aplicativo de amostra

Implante um aplicativo de amostra no novo namespace.

  1. Implante um aplicativo de amostra (por exemplo, httpbin) digitando:

    
    kubectl apply -f https://raw.githubusercontent.com/istio/istio/master/samples/httpbin/httpbin.yaml -n test-gateway
    

Etapa 6: Criar um HTTPRoute

Crie um HTTPRoute para direcionar o tráfego do Gateway para o serviço httpbin.

  1. Crie um arquivo chamado route.yaml com o seguinte conteúdo:

    apiVersion: gateway.networking.k8s.io/v1
    kind: HTTPRoute
    metadata:
      name: httpbin-route
      namespace: test-gateway
    spec:
      parentRefs:
      - name: my-gateway
      rules:
      - matches:
        - path:
            type: PathPrefix
            value: /get
        backendRefs:
        - name: httpbin
          port: 8000
    
  2. Crie o HTTPRoute digitando:

    kubectl apply -f route.yaml
    

Etapa 7: Verificar conectividade

Verifique a conectividade enviando uma solicitação ao endereço IP externo do Gateway.

  1. Recupere o endereço IP público do gateway e salve-o como uma variável de ambiente digitando:

    export GATEWAY_IP=$(kubectl get gateway my-gateway -n test-gateway -o jsonpath='{.status.addresses[0].value}')
  2. Use curl para enviar uma solicitação ao endereço IP externo do Gateway digitando:

    curl -i http://$GATEWAY_IP/get
    
    
    
  3. Confirme se você recebe uma resposta 200 OK do aplicativo httpbin.

Desativando (e removendo) o complemento de cluster do Istio

Estas instruções descrevem como desativar e remover o complemento de cluster Istio.

  1. Desative e remova o complemento usando a CLI do OCI digitando:

    oci ce cluster disable-addon --addon-name Istio --cluster-id <cluster-ocid> --is-remove-existing-add-on true
    
  2. (Opcional) Remova os recursos da API do Gateway.

    O processo de remoção de extensões não exclui automaticamente os recursos Gateway ou HTTPRoute que você criou. Remova-os manualmente para limpar os balanceadores de carga associados, informando:

    kubectl delete -f gateway.yaml
    kubectl delete -f route.yaml
  3. (Opcional) Remova os CRDs de API de Gateway.

    Se você não precisar mais da API do Gateway neste cluster, poderá remover os CRDs informando:

    kubectl delete -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.2.0/standard-install.yaml