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:
- Configurando o Complemento de Cluster do Istio como um Controlador de API do Gateway
- Desativando (e removendo) o complemento de cluster do Istio
Pré-requisitos
Antes de configurar o complemento de cluster do Istio para suportar a API do Kubernetes Gateway:
- Você deve ter acesso
kubectlao 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
- Etapa 2: Criar o arquivo de configuração do complemento do cluster Istio
- Etapa 3: Implantar o complemento de cluster do Istio no cluster e confirmar uma implantação bem-sucedida
- Etapa 4: Criar um Gateway
- Etapa 5: Implantar um aplicativo de amostra
- Etapa 6: Criar um HTTPRoute
- Etapa 7: Verificar conectividade
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.
-
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 -
Verifique se o CRD está instalado digitando:
kubectl get crd gateways.gateway.networking.k8s.io - Confirme se a CRD está listada na saída.
- 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.
-
Crie um arquivo JSON (por exemplo,
enableistio.json). -
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
enableIngressGatewaylegado 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
valuecomo"true", o complemento de cluster do Istio provisionará a implantação e o serviço clássicos doistio-ingressgatewayao lado do plano de controle. - Se você definir
valuecomo"false", somente o plano de controle (istiod) será instalado. Em seguida, você pode criar recursosGatewayque o Istio provisionará automaticamente conforme necessário.
- Se você definir
-
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.
-
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 -
Verifique a implantação bem-sucedida:
-
Informar:
oci ce cluster list-addons --cluster-id <cluster-ocid> -
Confirme se o estado do ciclo de vida do complemento de cluster do Istio é
ACTIVE.
-
-
Verifique se o plano de controle Istio está em execução:
-
Informar:
kubectl get pods -n istio-system -
Confirme se o pod
istiodestá no estadoRunning.
-
Etapa 4: Criar um Gateway
Crie o recurso Gateway.
- Crie um novo namespace (por exemplo, test-gateway) digitando:
kubectl create namespace test-gateway -
Crie um arquivo chamado
gateway.yamlcom 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: SameObserve a linha
gatewayClassName: istio, que informa ao complemento de cluster do Istio para gerenciar esse gateway. -
Crie a
Gatewaydigitando:kubectl apply -f gateway.yaml -
Obtenha o endereço IP externo digitando:
kubectl get gateway -n test-gatewayO OCI pode levar alguns minutos para provisionar o balanceador de carga.
Aguarde até que a coluna
PROGRAMMEDcontenhaTruee um endereço IP seja exibido na colunaADDRESS.
Etapa 5: Implantar um aplicativo de amostra
Implante um aplicativo de amostra no novo namespace.
-
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.
-
Crie um arquivo chamado
route.yamlcom 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 -
Crie o
HTTPRoutedigitando:kubectl apply -f route.yaml
Etapa 7: Verificar conectividade
Verifique a conectividade enviando uma solicitação ao endereço IP externo do Gateway.
-
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}') -
Use
curlpara enviar uma solicitação ao endereço IP externo do Gateway digitando:curl -i http://$GATEWAY_IP/get -
Confirme se você recebe uma resposta
200 OKdo aplicativo httpbin.
Desativando (e removendo) o complemento de cluster do Istio
Estas instruções descrevem como desativar e remover o complemento de cluster Istio.
-
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 -
(Opcional) Remova os recursos da API do Gateway.
O processo de remoção de extensões não exclui automaticamente os recursos
GatewayouHTTPRouteque você criou. Remova-os manualmente para limpar os balanceadores de carga associados, informando:kubectl delete -f gateway.yamlkubectl delete -f route.yaml -
(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