A Gateway API é um projeto open-source mantido pela comunidade SIG-NETWORK. Ela aprimora o networking de services ao oferecer interfaces expressivas, extensíveis e orientadas a funções. Com a Gateway API, você aplica restrições condicionais às regras de roteamento para acessar aplicações em um cluster.
Pré-requisitos
Você adicionou um cluster a uma instância do ASM e a instância do ASM está na versão 1.18 ou posterior.
Você implantou um service de ingress gateway e as portas 80 e 443 estão habilitadas no gateway.
A aplicação httpbin já foi implantada. Para mais informações, consulte a Etapa 1 em Implantar a aplicação httpbin.
Observações
-
Compatibilidade de versões:
O ASM 1.18 oferece suporte à Gateway API v0.6.0.
O ASM 1.22 e versões posteriores oferecem suporte à Gateway API v1.1 e adicionam compatibilidade com GRPCRoute.
O ASM 1.24 e versões posteriores oferecem suporte à Gateway API v1.2.0.
No modo multi-cluster, se você aplicar recursos da Gateway API com o mesmo nome no mesmo namespace em vários clusters do plano de dados, o último recurso aplicado substituirá os anteriores.
Etapa 1: Verificar os CRDs da Gateway API
Os CRDs do componente Gateway API são instalados por padrão em clusters do Container Service for Kubernetes (ACK) v1.24 e posteriores.
Para confirmar se os CRDs existem no seu cluster ACK, execute o comando a seguir.
kubectl get crds | grep gateway.networking.k8s.io
-
Se os CRDs estiverem instalados, a saída será semelhante a esta:
gatewayclasses.gateway.networking.k8s.io 2023-05-10T02:51:33Z gateways.gateway.networking.k8s.io 2023-05-10T02:51:33Z httproutes.gateway.networking.k8s.io 2023-05-10T02:51:33Z referencegrants.gateway.networking.k8s.io 2023-05-10T02:51:33ZExecute o seguinte comando para verificar a versão do CRD.
kubectl get crds -o yaml | grep 'gateway.networking.k8s.io/bundle-version'Saída esperada:
gateway.networking.k8s.io/bundle-version: v0.6.0 gateway.networking.k8s.io/bundle-version: v0.6.0 gateway.networking.k8s.io/bundle-version: v0.6.0 gateway.networking.k8s.io/bundle-version: v0.6.0 Caso a saída não inclua os CRDs esperados, faça login no console do ACK, acesse a página Add-ons e instale o componente Gateway API. Para mais detalhes, consulte Gerenciar add-ons.
Etapa 2: Ativar o suporte à Gateway API
No ambiente kubeconfig da sua instância do ASM, adicione o campo enableGatewayAPI: true ao recurso ASMMeshConfig chamado default.
apiVersion: istio.alibabacloud.com/v1beta1
kind: ASMMeshConfig
metadata:
name: default
spec:
enableGatewayAPI: true
Após ativar a opção enableGatewayAPI, o plano de controle gera os CRDs relevantes da Gateway API. Tanto a Gateway API quanto o Istio definem um recurso chamado Gateway, o que pode causar conflitos ao usar o kubectl. Para resolver isso, utilize o comando kubectl get gtw para recuperar recursos Gateway da Gateway API e o comando kubectl get gw para recuperar recursos Gateway do Istio.
Etapa 3: Configurar uma regra de roteamento HTTP
Utilize a Gateway API para configurar uma regra de roteamento HTTP que exponha a aplicação httpbin por meio do gateway. É necessário criar os recursos Gateway e HTTPRoute no seu cluster ACK.
-
Crie um recurso Gateway.
-
Crie um arquivo chamado gateway.yaml com o conteúdo a seguir.
Esta configuração aplica o recurso Gateway ao gateway ASM especificado. Ela cria um listener na porta 80 usando o protocolo HTTP e define o
hostnamecomo*.aliyun.com, permitindo que regras de roteamento de todos os namespaces se anexem a este listener. No arquivo YAML, substitua${ASM_GATEWAY_NAME}pelo nome do seu gateway ASM. -
No ambiente kubeconfig do seu cluster ACK, execute o comando a seguir para implantar o Gateway.
kubectl apply -f gateway.yaml
-
-
Crie um recurso HTTPRoute.
-
Crie um arquivo chamado http-route.yaml com o conteúdo a seguir.
Esta configuração anexa o HTTPRoute ao recurso
gatewayno namespaceistio-system. Como nenhum listener específico foi nomeado, a regra se aplica a todos os listeners compatíveis no gateway. Requisições com o prefixo de caminho/getsão roteadas para a porta 8000 do service httpbin no mesmo namespace. -
No ambiente kubeconfig do seu cluster ACK, execute o comando a seguir para implantar o HTTPRoute.
kubectl apply -f http-route.yaml
-
-
Execute o seguinte comando para acessar a aplicação httpbin pelo ingress gateway e verificar se a regra de roteamento HTTP está ativa. Substitua {INGRESS_GATEWAY_IP} pelo endereço IP do seu ingress gateway.
curl -I -HHost:httpbin.aliyun.com "http://{INGRESS_GATEWAY_IP}:80/get"Saída esperada:
HTTP/1.1 200 OK server: istio-envoy date: Fri, 12 May 2023 08:16:30 GMT content-type: application/json content-length: 516 access-control-allow-origin: * access-control-allow-credentials: true x-envoy-upstream-service-time: 4Uma resposta
200 OKconfirma que a regra de roteamento HTTP está ativa.
Etapa 4: Configurar uma regra de roteamento HTTPS
Use a Gateway API para configurar uma regra de roteamento HTTPS. Essa regra expõe a aplicação httpbin e realiza a terminação TLS no gateway ASM. Crie os recursos Gateway e HTTPRoute no cluster ACK.
Utilize o recurso de gerenciamento global de certificados do ASM para criar um certificado HTTPS para
a.aliyun.com. Nomeie o certificado comomyexample-credential. Para mais informações, consulte a Etapa 1: Preparar certificados de servidor e chaves privadas para vários hosts.-
Crie um recurso Gateway.
-
Crie um arquivo chamado gateway-https.yaml com o conteúdo a seguir.
No arquivo YAML, substitua
${ASM_GATEWAY_NAME}pelo nome do seu gateway ASM. -
No ambiente kubeconfig do seu cluster ACK, execute o comando a seguir para implantar o Gateway.
kubectl apply -f gateway-https.yaml
-
-
Crie um recurso HTTPRoute.
-
Crie um arquivo chamado httpbin-https.yaml com o conteúdo a seguir.
-
No ambiente kubeconfig do seu cluster ACK, execute o comando a seguir para implantar o HTTPRoute.
kubectl apply -f httpbin-https.yaml
-
-
Execute o seguinte comando para acessar a aplicação httpbin pelo ingress gateway e verificar se a regra de roteamento HTTPS está ativa. Substitua {INGRESS_GATEWAY_IP} pelo endereço IP do seu ingress gateway.
curl -k -H Host:a.aliyun.com --resolve a.aliyun.com:443:{INGRESS_GATEWAY_IP} https://a.aliyun.com/status/418Saída esperada:
-=[ teapot ]=- _...._ .' _ _ `. | ."` ^ `". _, \_;`"---"`|// | ;/ \_ _/ `"""`A saída confirma que a regra de roteamento HTTPS está ativa.