Como Usar o Gateway API no APISIX Ingress Controller

Yeqi Peng

November 11, 2022

Products

O que é a API de Gateway do Kubernetes

A API de Gateway é outra especificação iniciada pela comunidade (gerenciada pelo sig-network) para ajudar os usuários a expor serviços no Kubernetes fora do cluster, além do Service e Ingress nativos.

A API de Gateway suporta muitos protocolos de rede comuns (por exemplo, HTTP, TCP, UDP) e também TLS. Além disso, a API de Gateway inclui recursos de Gateway que possibilitam gerenciar o ciclo de vida de um proxy ou gateway por meio da API do Kubernetes.

Por que precisamos da API de Gateway

Comparada ao Ingress, a API de Gateway representa o superconjunto funcional do Ingress, com as seguintes melhorias:

  • Orientada a funções: O Gateway é composto por recursos de API que modelam funções organizacionais que usam e configuram a rede de serviços do Kubernetes.
  • Expressiva: Os recursos da API de Gateway suportam funcionalidades principais, como correspondência baseada em cabeçalhos, ponderação de tráfego e outras capacidades que só eram possíveis no Ingress por meio de anotações personalizadas.
  • Extensível: A API de Gateway permite que recursos personalizados sejam vinculados em várias camadas da API, o que possibilita personalizações granulares nos locais apropriados dentro da estrutura da API.

Além disso, o padrão inclui recursos como portabilidade, gateways compartilhados e referências entre namespaces.

Como mostrado no diagrama, o design orientado a funções permite o compartilhamento de infraestrutura de rede dentro de um cluster entre diferentes equipes e o compartilhamento de políticas e restrições definidas pelo administrador do cluster. Isso permite que diferentes tipos de funções, como provedores de infraestrutura, administradores de cluster e desenvolvedores de aplicativos, se concentrem em seu próprio trabalho e não no que outras funções são responsáveis.

api-mode.png

Diferentes funções configuram diferentes níveis de recursos da API de Gateway, e os diferentes níveis trabalham juntos:

gateway-roles.png

Estado atual da API de Gateway

Atualmente, com o lançamento da API de Gateway v0.5.0, algumas APIs principais importantes entram em Beta pela primeira vez, incluindo GatewayClass, Gateway e HTTPRoute.

Como usar a API de Gateway no APISIX Ingress

O suporte à API de Gateway no APISIX Ingress Controller está em desenvolvimento e está na fase Alpha, suportando atualmente recursos como HTTPRoute e TCPRoute.

Instalar o CRD da API de Gateway

Para usar a API de Gateway, você precisa primeiro instalar o CRD para a API de Gateway, seja por meio de uma cópia no repositório do APISIX Ingress Controller ou no repositório oficial kubernetes-sigs/gateway-api. Aqui, usamos uma cópia do CRD do repositório do APISIX Ingress Controller como exemplo.

Execute o seguinte comando para instalar o CRD da API de Gateway.

git pull git@github.com:apache/apisix-ingress-controller.git
cd apisix-ingress-controller

kubectl apply -f ./samples/deploy/gateway-api/

Instalar o APISIX Ingress Controller

O suporte à API de Gateway não está habilitado por padrão no APISIX Ingress Controller e pode ser habilitado com o parâmetro -enable-gateway-api=true.

Ao instalar com o Helm, você pode habilitá-lo configurando os valores.

Use o seguinte comando para instalar o APISIX e o APISIX Ingress Controller.

helm repo add apisix https://charts.apiseven.com
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
kubectl create ns apisix-ingress

helm install apisix apisix/apisix --namespace apisix-ingress \
--set gateway.type=NodePort \
--set ingress-controller.enabled=true \
--set ingress-controller.config.apisix.serviceNamespace=apisix-ingress \
--set ingress-controller.config.kubernetes.enableGatewayAPI=true

Observe o parâmetro -set ingress-controller.config.kubernetes.enableGatewayAPI=true, que é usado para habilitar o suporte à API de Gateway.

Esses comandos criarão um ambiente de teste completo no namespace apisix-ingress, incluindo APISIX, etcd e APISIX Ingress Controller.

Implantar carga de teste

Use a imagem kennethreitz/httpbin como carga de teste.

Use o seguinte comando para implantar essas cargas no namespace padrão.

kubectl run httpbin --image kennethreitz/httpbin --port 80
kubectl expose pod httpbin --port 80

Configurar HTTPRoute

Atualmente, o APISIX Ingress Controller suporta a versão v1alpha2 do recurso da API de Gateway.

Para teste, use a seguinte configuração de HTTPRoute e salve-a no arquivo httproute.yaml:

# httproute.yaml
apiVersion: gateway.networking.k8s.io/v1alpha2
kind: HTTPRoute
metadata:
name: basic-http-route
spec:
hostnames:
- local.httpbin.org
rules:
- backendRefs:
    - name: httpbin
    port: 80
    matches:
    - path:
        type: PathPrefix
        value: /

Use o seguinte comando para implantar esta configuração de HTTPRoute:

kubectl apply -f ./httproute.yaml

Validação

A validação pode ser feita diretamente no Pod do APISIX executando o seguinte comando:

kubectl -n apisix-ingress exec -it $(kubectl -n apisix-ingress get Pods -l "app.kubernetes.io/name=apisix" -o name) -c apisix -- curl -H "Host: local.httpbin.org" localhost:9080/ip

A saída esperada é:

{
"origin": "127.0.0.1"
}

Isso indica que nossa configuração entrou em vigor com sucesso.

Como o APISIX Ingress suporta a API de Gateway

Atualmente, o APISIX Ingress Controller está adicionando suporte para a API de Gateway e suporta recursos como HTTPRoute, TCPRoute, etc.

O suporte do APISIX Ingress Controller para Gateway e Gateway Class está em desenvolvimento ativo, portanto, a configuração desses recursos ainda não terá efeito.

Resumo

Neste artigo, apresentamos a API de Gateway, uma nova especificação na comunidade para expor serviços fora de um cluster, e descrevemos como usá-la no APISIX Ingress Controller.

O suporte completo à API de Gateway no APISIX Ingress Controller está em desenvolvimento ativo.

Tags: