Como Usar o Gateway API no APISIX Ingress Controller
Yeqi Peng
November 11, 2022
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.
Diferentes funções configuram diferentes níveis de recursos da API de Gateway, e os diferentes níveis trabalham juntos:
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.