O Kourier é um gateway de entrada nativo do Knative, leve e de código aberto, desenvolvido sobre o Envoy e mantido pela comunidade Knative. Implante-o para rotear tráfego HTTP e HTTPS entre revisões do Knative, configure serviços gRPC, defina timeouts e retentativas, gerencie certificados TLS (Transport Layer Security) e integre serviços externos de autorização.
Pré-requisitos
Antes de começar, verifique se você possui:
O Knative implantado em seu cluster ACK. Consulte Implantar e gerenciar o Knative.
Implantar o gateway Kourier
Implante o Kourier durante a configuração inicial do Knative (pelo console ACK) ou após a implantação (usando kubectl).
Para uma nova instalação do Knative
Faça login no console ACK. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique no nome do seu cluster. No painel de navegação à esquerda, escolha Applications > Knative.
Na aba Components, localize Kourier na seção Add-on Component e clique em Deploy na coluna Actions. Na caixa de diálogo exibida, confirme Confirm. A coluna Status do Kourier mudará para Deployed.
Para uma instalação existente do Knative
-
Execute o comando a seguir para abrir o ConfigMap
config-networkno seu editor padrão:kubectl -n knative-serving edit configmap config-network -
No editor, localize a chave
ingress.classna seçãodatae altere seu valor parakourier.ingress.networking.knative.dev, conforme mostrado abaixo:apiVersion: v1 data: ... ingress.class: kourier.ingress.networking.knative.dev # Use the Kourier gateway ... kind: ConfigMap metadata: name: config-network namespace: knative-serving Salve e feche o arquivo. O Kubernetes aplica a alteração automaticamente.
(Opcional) Configure um CLB interno
Por padrão, o Kourier cria um Classic Load Balancer (CLB) voltado para a Internet. Para usar um CLB interno, adicione a anotação service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type: "intranet" ao manifesto do Service do Kourier:
apiVersion: v1
kind: Service
metadata:
name: kourier
namespace: knative-serving
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type: "intranet"
...
spec:
ports:
- name: http2
port: 80
protocol: TCP
targetPort: 8080
- name: https
port: 443
protocol: TCP
targetPort: 8443
selector:
app: 3scale-kourier-gateway
type: LoadBalancer
O valor padrão da anotação éinternet. Defina-o comointranetpara alternar para um CLB interno.
Acessar um Service do Knative pelo gateway Kourier
Os passos a seguir utilizam um Service de exemplo do Knative chamado helloworld-go para demonstrar o acesso via HTTP e HTTPS. Implante o Service primeiro e depois escolha o protocolo necessário.
Os comandoscurlabaixo passam o nome de domínio no cabeçalhoHostporque o DNS não é configurado por padrão. Se você configurar o DNS para o gateway, poderá omitir a flag-H "Host:".
Implantar o serviço de exemplo
Faça login no console ACK. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique no nome do seu cluster. No painel de navegação à esquerda, escolha Applications > Knative.
-
Na aba Services, defina Namespace como default, 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.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go:73fbdd56 env: - name: TARGET value: "Knative"Quando Status exibir Created, o Service estará pronto.
Na aba Services, anote o nome de domínio na coluna Default Domain e o endereço IP do gateway na coluna Gateway referentes ao Service
helloworld-go. Você precisará desses valores nas próximas etapas.
Acesso via HTTP
Execute o comando a seguir, substituindo o endereço IP do gateway e o nome de domínio pelos valores que você anotou:
curl -H "Host: helloworld-go.default.example.com" http://8.141.XX.XX
Saída esperada:
Hello Knative!
Acesso via HTTPS
Etapa 1: Gerar um certificado TLS.
Execute os comandos a seguir para criar um certificado autoassinado:
openssl genrsa -out tls.key 4096
openssl req -subj "/CN=*.example.com/L=*.example.com" -sha256 -new -key tls.key -out tls.csr
echo subjectAltName = DNS:helloworld-go.default.example.com,DNS:helloworld-go.default.example.cn > extfile.cnf
openssl x509 -req -days 3650 -sha256 -in tls.csr -signkey tls.key -out tls.crt -extfile extfile.cnf
Isso gera uma chave RSA de 4096 bits e um certificado válido por 3650 dias, com Subject Alternative Names para helloworld-go.default.example.com e helloworld-go.default.example.cn.
Etapa 2: Crie um Secret a partir do certificado.
kubectl -n knative-serving create secret tls kourier-cert --key tls.key --cert tls.crt
Etapa 3: Verifique se o Deployment net-kourier-controller existe.
kubectl get deployments -n knative-serving
Etapa 4: Configure o certificado no controller.
kubectl -n knative-serving edit deployment net-kourier-controller
Em spec.containers[].env, adicione as duas variáveis de ambiente a seguir:
...
spec:
containers:
- env:
- name: CERTS_SECRET_NAMESPACE
value: knative-serving
- name: CERTS_SECRET_NAME
value: kourier-cert
...
|
Parâmetro |
Descrição |
|
|
Namespace onde o Secret foi criado ( |
|
|
Nome do Secret ( |
Etapa 5: Verifique se o pod do controller está em execução.
kubectl -n knative-serving get po
Saída esperada:
NAME READY STATUS RESTARTS AGE
net-kourier-controller-****** 1/1 Running 0 10s
Etapa 6: Acessar o Service via HTTPS.
curl -H "Host: helloworld-go.default.example.com" -k --cert tls.crt --key tls.key https://8.141.XX.XX
Saída esperada:
Hello Knative!
(Opcional) Visualize o painel de monitoramento do Knative
O Knative inclui monitoramento integrado. Na página Knative, clique em na aba Monitoring Dashboards para visualizar métricas dos seus Services. Para instruções de configuração, consulte Visualizar o painel de monitoramento do Knative.
Próximos passos
Usar nomes de domínio e caminhos personalizados — configure nomes de domínio personalizados para Services do Knative.
Configurar um certificado para acessar Services via HTTPS — configure certificados TLS de nível de produção.
Implantar serviços gRPC no Knative — melhore a eficiência da rede com gRPC.
Configurar sondagem de porta no Knative — monitore o status de integridade e a disponibilidade dos Services do Knative.
Associar um EIP à instância de contêiner elástica onde um Service do Knative é executado — conecte uma instância de contêiner elástica à Internet usando um elastic IP address (EIP).