Se você usar um domínio personalizado para um Knative Service, configure um certificado HTTPS para proteger os dados em trânsito. O Knative oferece suporte a acesso HTTPS, permitindo mapear com segurança um Knative Service para um domínio personalizado.
Pré-requisitos
O Knative deve estar implantado no cluster. Para mais informações, consulte Implantar e gerenciar componentes do Knative.
Etapa 1: Criar um Knative Service
Faça login no ACK console. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique no nome do cluster desejado. No painel de navegação à esquerda, escolha .
-
Na página Knative, na aba Services, defina o Namespace como default e clique em Create from Template. Use o modelo de exemplo para criar um Knative Service chamado helloworld-go. Siga as instruções na tela.
Após a criação, a aba Services exibirá o serviço helloworld-go com o status Successful. O nome de domínio padrão é
helloworld-go.default.example.com. Antes de acessar o serviço, configure o cabeçalho Host para garantir que o gateway de acesso roteie corretamente as solicitações para o domínio do serviço.
Etapa 2: Configurar o serviço HTTPS
O método de configuração de HTTPS varia conforme o tipo de gateway:
Gateway ALB: O AlbConfig gerencia os certificados. Ative o TLS adicionando uma Annotation, eliminando a necessidade de gerenciamento manual de certificados.
Gateway Kourier: Crie manualmente um Secret de certificado e use um DomainMapping para vincular esse Secret ao domínio.
ALB
Especifique um certificado no AlbConfig e ative o acesso TLS no Knative Service usando a Annotation knative.k8s.alibabacloud/tls: "true". Veja o exemplo abaixo.
Para ativar o acesso HTTPS, adicione uma Annotation TLS ao seu Knative Service e configure um listener na porta 443 no AlbConfig.
-
Adicione a Annotation
knative.k8s.alibabacloud/tls: "true"ao arquivo YAML do seu Knative Service.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" -
Adicione um listener na porta 443 ao seu AlbConfig, como
knative-internet, para rotear o tráfego HTTPS para o cluster.apiVersion: alibabacloud.com/v1 kind: AlbConfig metadata: name: knative-internet spec: config: ... listeners: - port: 443 # Options include HTTP, HTTPS, and QUIC protocol: HTTPS ... -
Verifique se o serviço está acessível via HTTPS.
# Replace with your ALB gateway address. curl -H "Host: helloworld.knative.top" https://alb-ppcate4ox6******.cn-beijing.alb.aliyuncs.com -kSaída esperada:
Hello Knative!
Kourier
O gateway Kourier não possui gerenciamento nativo de certificados. Armazene o certificado TLS como um Secret no cluster e use um DomainMapping para associar o certificado ao domínio.
1. Criar um Secret de certificado
O exemplo a seguir usa um certificado HTTPS autoassinado gerado pelo OpenSSL. Se você já tiver um arquivo de certificado no formato .pem, ignore a Etapa 1 e inicie diretamente pela Etapa 2.
Certificados autoassinados destinam-se apenas a testes. Em ambientes de produção, use um certificado emitido por uma Autoridade Certificadora (CA).
-
Gere um certificado autoassinado usando o OpenSSL.
openssl genrsa -out knativetop-key.pem 4096 openssl req -subj "/CN=helloworld.knative.top" -sha256 -new -key knativetop-key.pem -out knativetop.csr echo subjectAltName = DNS:helloworld.knative.top > extfile.cnf openssl x509 -req -days 3650 -sha256 -in knativetop.csr -signkey knativetop-key.pem -out knativetop-cert.pem -extfile extfile.cnfSaída esperada:
Signature ok subject=CN = helloworld.knative.top Getting Private key -
Opcionalmente, obtenha a codificação Base64 dos arquivos
knativetop-key.pemeknativetop-cert.pemda etapa 1. Esse procedimento é necessário apenas se você for criar o Secret manualmente via arquivo YAML, não sendo exigido para o comando kubectl da próxima etapa.-
Aplique a codificação Base64 ao arquivo
knativetop-key.pem.cat knativetop-key.pem | base64Saída esperada:
a25hdGl2ZXRvcC1r****** -
Aplique a codificação Base64 ao arquivo
knativetop-cert.pem.cat knativetop-cert.pem | base64Saída esperada:
a25hdGl2ZXRvcC1jZ******==
-
-
Crie o Secret.
Use um Secret na configuração TLS do Knative Service para ativar o acesso seguro ao domínio
helloworld.knative.top.kubectl create secret tls secret-tls --key knativetop-key.pem --cert knativetop-cert.pemSaída esperada:
secret/secret-tls created
2. Criar um DomainMapping
No Knative, o DomainMapping é um recurso que mapeia um domínio para um ou mais Knative Services.
Com o Secret criado, use um DomainMapping para vincular o domínio personalizado ao Knative Service e ativar a criptografia TLS referenciando o Secret correspondente.
-
Crie um arquivo
helloworld.knative.top.yamle insira a seguinte configuração de DomainMapping.apiVersion: serving.knative.dev/v1beta1 kind: DomainMapping metadata: name: helloworld.knative.top namespace: default spec: ref: name: helloworld-go kind: Service apiVersion: serving.knative.dev/v1 # tls block specifies the secret to be used tls: secretName: secret-tls -
Aplique o DomainMapping no cluster.
kubectl apply -f helloworld.knative.top.yamlSaída esperada:
domainmapping.serving.knative.dev/helloworld.knative.top created -
Execute o comando abaixo para verificar se o DomainMapping está pronto.
kubectl get domainmapping helloworld.knative.topSaída esperada:
NAME URL READY REASON helloworld.knative.top https://helloworld.knative.top True -
Verifique se o serviço está acessível pelo domínio personalizado.
# Replace with your Kourier gateway address. curl -H "Host: helloworld.knative.top" https://8.141.XX.XX -kSaída esperada:
>Hello Knative!
Documentos relacionados
Configure um probe para monitorar a integridade e a disponibilidade do seu Knative Service. Para mais detalhes, consulte Configurar Probes para um Knative Service.
Se sua instância ECI precisar de conexão com a Internet, associe-a a um EIP. Para mais informações, consulte Associar um EIP a uma instância ECI para acesso à Internet.