O ALB (Application Load Balancer) Ingress é um gateway totalmente gerenciado e livre de O&M que roteia tráfego da camada 7 para Serviços do Knative. Ele oferece suporte a HTTP, HTTPS e QUIC (Quick UDP Internet Connections), além de fornecer dimensionamento automático e múltiplas estratégias de canary release — sendo ideal para aplicações web em grande escala, roteamento de tráfego refinado e requisitos complexos de roteamento HTTP/HTTPS.
Pré-requisitos
Antes de começar, certifique-se de que:
O Knative esteja implantado no seu cluster. Para mais informações, consulte Implantar o Knative.
O controlador do ALB Ingress esteja instalado. Para mais informações, consulte Gerencie o controlador do ALB Ingress.
Se o seu cluster utilizar o plugin de rede Flannel, os Serviços do Knative devem ser expostos via tipo de serviço NodePort. Adicione eni: false ao ConfigMap config-network antes de prosseguir:
-
Abra o ConfigMap para edição:
kubectl -n knative-serving edit configmap config-network -
Adicione
eni: falsena seçãodata:apiVersion: v1 data: ... eni: false # Add this line. ... kind: ConfigMap metadata: name: config-network namespace: knative-serving ...
Etapa 1: Configure o ALB Ingress
Escolha um dos métodos abaixo, dependendo se você deseja que o Knative crie uma nova instância do ALB ou reutilize uma existente.
Método 1: Crie automaticamente uma instância do ALB
Utilize este método caso não possua uma instância do ALB existente. O Knative cria e gerencia a instância do ALB para você.
Opção A: Configure durante a implantação do Knative
Faça login no console do ACK. No painel de navegação à esquerda, clique em Clusters.
Localize o cluster desejado e clique no nome dele. No painel de navegação à esquerda, escolha Applications > Knative.
Na aba Components, clique em Deploy Knative. Na página Deploy Knative, selecione ALB e escolha pelo menos dois vSwitches em zonas diferentes. Siga as instruções na página para concluir a implantação. Para informações sobre a criação de vSwitches, consulte Criar e gerenciar um vSwitch.
Opção B: Modifique uma implantação existente do Knative
Caso o Knative já esteja implantado, execute o comando a seguir para abrir o ConfigMap para edição:
kubectl -n knative-serving edit configmap config-network
Modifique ingress.class: alb.ingress.networking.knative.dev, configure o parâmetro vswitch-ids, salve o arquivo config-network e saia. Para mais informações sobre as regiões e zonas que suportam o ALB Ingress, consulte Regiões e zonas.
apiVersion: v1
data:
...
ingress.class: alb.ingress.networking.knative.dev # Specifies the ALB Ingress controller.
vswitch-ids: vsw-uf6kbvc7mccqia2pi****,vsw-uf66scyuw2fncpn38**** # Two vSwitch IDs in different zones. The system automatically binds the vSwitches when creating the ALB instance.
intranet: "true" # Creates an internal ALB instance.
internet: "true" # Default true. Creates a public ALB instance. Set to "false" to disable the public ALB.
...
kind: ConfigMap
metadata:
name: config-network
namespace: knative-serving
...
Importante: Se você ativar apenas uma instância privada (intranet) do ALB, configure os Serviços do Knative para acesso interno definindo o rótulo networking.knative.dev/visibility: cluster-local. Para mais informações sobre a implantação do Knative, consulte Implantar o Knative em um cluster ACK e Implantar o Knative em um cluster ACK Serverless.
Método 2: Usar uma instância existente do ALB
Este método é indicado quando você já possui uma instância pública do ALB e deseja que o Knative roteie o tráfego através dela. Não é necessário configurar vswitch-ids.
Execute o comando a seguir para abrir o ConfigMap para edição:
kubectl -n knative-serving edit configmap config-network
Modifique ingress.class: alb.ingress.networking.knative.dev e defina albconfig como o nome de um recurso ALBConfig existente (por exemplo, alb-dev-albconfig):
apiVersion: v1
data:
...
ingress.class: alb.ingress.networking.knative.dev # Specifies the ALB Ingress controller.
albconfig: alb-dev-albconfig # Name of the existing ALBConfig resource.
...
kind: ConfigMap
metadata:
name: config-network
namespace: knative-serving
...
Etapa 2: Acessar um Serviço do Knative através do ALB Ingress
Faça login no console do ACK. No painel de navegação à esquerda, clique em Clusters.
Localize o cluster desejado e clique no nome dele. No painel de navegação à esquerda, escolha Applications > Knative.
-
Na aba Services, selecione default na lista suspensa Namespace e clique em Create from Template. Cole o YAML a seguir no editor e clique em Create:
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: helloworld-go spec: template: spec: containers: - image: registry-vpc.cn-beijing.aliyuncs.com/knative-sample/helloworld-go:73fbdd56 # Replace with your region. env: - name: TARGET value: "Knative"Isso cria um Serviço do Knative chamado
helloworld-go. Na página Services, anote o nome de domínio e o endereço IP do gateway nas colunas Default Domain e Gateway referentes ao Serviço
helloworld-go.-
Execute o comando a seguir para verifique o acesso:
Este comando utiliza um cabeçalho
Hostporque o DNS ainda não está configurado. Para acessar o Serviço diretamente pelo nome de domínio, configure um registro CNAME conforme descrito em Adicionar um registro CNAME .curl -H "Host: helloworld-go.default.example.com" http://alb-******.cn-beijing.alb.aliyuncs.comSubstitua o valor do cabeçalho Host e o endereço do ALB pelos valores reais obtidos na etapa 4. Saída esperada:
Hello Knative!
(Opcional) Etapa 3: Visualize o painel de monitoramento do Knative
O Knative oferece monitoramento pronto para uso. Na página Knative, clique na aba Monitoring Dashboards para visualizar as métricas dos seus Serviços. Para mais informações, consulte Visualize o painel de monitoramento do Knative.
Mais operações
Ative HTTPS com TLS
Para proteger seus Serviços do Knative com Transport Layer Security (TLS), adicione a anotação a seguir ao Serviço do Knative. Certifique-se primeiro de ter um certificado especificado no ALBConfig.
annotations:
knative.k8s.alibabacloud/tls: "true"
Exemplo completo:
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: helloworld
namespace: default
annotations:
knative.k8s.alibabacloud/tls: "true"
spec:
template:
spec:
containers:
- image: registry-vpc.cn-shenzhen.aliyuncs.com/knative-sample/helloworld-go:73fbdd56 # Replace with your region.
env:
- name: TARGET
value: "Knative"
Para gerencie um certificado como Secret, consulte Criar um certificado gerenciado como Secret.
Verifique o acesso via HTTPS:
curl -H "Host: helloworld.default.knative.top" https://alb-ppcate4ox6ge9m1wik.cn-shenzhen.alb.aliyuncs.com -k
Saída esperada:
Hello Knative!
Redirecionar HTTP para HTTPS
Para redirecionar requisições HTTP para HTTPS no nível de cada Serviço, adicione a seguinte anotação ao seu Serviço do Knative:
annotations:
networking.knative.dev/http-protocol: redirected
Exemplo completo:
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: helloworld-go
annotations:
networking.knative.dev/http-protocol: redirected
spec:
template:
spec:
containers:
- image: registry-vpc.cn-beijing.aliyuncs.com/knative-sample/helloworld-go:73fbdd56 # Replace with your region.
env:
- name: TARGET
value: "Knative"
Adicionar um registro CNAME
Mapeie um nome de domínio personalizado para o domínio da instância do ALB adicionando um registro CNAME. Isso permite que os usuários acessem seu Serviço do Knative diretamente pelo nome de domínio. Para mais informações, consulte Configure um registro CNAME para uma instância do ALB.
Referência de parâmetros do config-network
A tabela a seguir lista os parâmetros do ConfigMap config-network utilizados neste documento:
|
Parâmetro |
Descrição |
Método |
|
|
Especifica o controlador de ingress. Defina como |
Ambos |
|
|
IDs separados por vírgula de dois vSwitches em zonas diferentes. Obrigatório ao criar uma nova instância do ALB. |
Apenas Método 1 |
|
|
Defina como |
Apenas Método 1 |
|
|
Nome de um recurso ALBConfig existente a ser reutilizado. |
Apenas Método 2 |
Próximos passos
Usar nomes de domínio e caminhos personalizados — configure domínios personalizados para Serviços do Knative.
Configure um certificado para acessar Serviços via HTTPS — configure TLS para uso em produção.
Implantar um Serviço gRPC no Knative — utilize gRPC para melhorar a eficiência da rede.
Configure sondagem de porta no Knative — monitore a integridade e disponibilidade do Serviço.
Associar um elastic IP address (EIP) à instância de contêiner elástica onde um Serviço do Knative é executado — conecte instâncias de contêiner elásticas à internet.