Saiba como configurar a exibição do Knative para usar seus próprios certificados SSL/TLS.
Como alternativa, é possível usar o recurso de certificados TLS gerenciados, que cria e renova automaticamente os certificados TLS por meio de Let's Encrypt
Para usar seus próprios certificados, armazene os certificados TLS em um secret do Kubernetes e configure o gateway de entrada do Anthos Service Mesh para usar esse secret.
Antes de começar
- Estas instruções presumem que você já tenha recebido seus certificados TLS.
- Você precisa configurar um domínio personalizado. Para detalhes, consulte Como mapear domínios personalizados.
- É necessário configurar cada um dos serviços de exibição do Knative
que usam o
gateway de entrada
para exibir tráfego externo. Se esses serviços externos não estiverem
configurados para usar os certificados TLS, os serviços não poderão
verificar uma conexão HTTPS e, portanto, nunca atingir o estado
ready
.
Como armazenar certificados TLS em um secret do Kubernetes
Para armazenar os certificados em um Secret, siga estas etapas:
Abra um terminal e navegue até o diretório em que seus certificados TLS estão localizados.
Use o seguinte comando para criar um secret que armazene seus certificados:
kubectl create --namespace INGRESS_NAMESPACE secret tls SECRET_NAME \ --key PRIVATE_KEY.pem \ --cert FULL_CHAIN.pem
Substitua:
- INGRESS_NAMESPACE pelo namespace do
serviço de entrada,
istio-ingressgateway
. Especifique o namespaceistio-system
se tiver instalado o Anthos Service Mesh com a configuração padrão. - SECRET_NAME pelo nome que você quer usar para o Secret do Kubernetes.
- PRIVATE_KEY.pem pelo nome do arquivo que contém a chave privada do certificado.
- FULL_CHAIN.pem pelo nome do arquivo que contém seu certificado público.
- INGRESS_NAMESPACE pelo namespace do
serviço de entrada,
Agora é possível configurar o gateway de entrada para usar o secret que você acabou de criar para o certificado TLS.
Como configurar o gateway de entrada para usar seus certificados
Modifique o gateway de entrada do Anthos Service Mesh para usar o secret que você criou para seus certificados TLS:
Abra o YAML do gateway de entrada no modo de edição executando o seguinte comando:
kubectl edit gateway knative-ingress-gateway --namespace knative-serving
Exemplo da configuração padrão do gateway de entrada:
apiVersion: networking.istio.io/v1beta1 kind: Gateway metadata: ... # other skipped configuration ... spec: selector: istio: ingressgateway servers: - hosts: - '*' port: name: http number: 80 protocol: HTTP
Configure o gateway de entrada para usar o secret anexando os atributos
hosts
,port
etls
ao YAML atual.Para configurar todos os serviços para usar a mesma chave secreta: anexe o seguinte à sua configuração YAML e especifique
"*"
como o valor do atributohosts
:... # other skipped configuration ... - hosts: - "*" port: name: https number: 443 protocol: HTTPS tls: mode: SIMPLE credentialName: SECRET_NAME
Substitua SECRET_NAME pelo nome do secret que você criou.
Para configurar cada um dos serviços individualmente: anexe o seguinte à sua configuração YAML e especifique os valores dos atributos
hosts
usando o nome e o namespace do serviço:Para cada serviço, é preciso especificar os valores dos atributos
hosts
,port
etls
:... # other skipped configuration ... - hosts: - SERVICE_NAME.SERVICE_NAMESPACE.CUSTOM_DOMAIN port: number: 443 name: https-SERVICE_NAME protocol: HTTPS tls: mode: SIMPLE credentialName: SECRET_NAME
Substitua:
- SERVICE_NAME pelo nome do serviço de exibição do Knative. Cada serviço que usa o gateway de entrada para exibir o tráfego externo precisa ser configurado individualmente.
- SERVICE_NAMESPACE pelo nome do namespace em que o serviço está sendo executado.
- CUSTOM_DOMAIN pelo domínio personalizado para o qual você configurou o serviço a ser usado.
- SECRET_NAME pelo nome do secret que você quer que o serviço use. Se você criou vários secrets para diferentes conjuntos de certificados TLS, especifique o secret que cada serviço usa.
Salve as alterações.
Agora é possível usar o protocolo HTTPS para acessar os serviços de exibição do Knative implantados.
Examples
- Configure todos os serviços:
Neste exemplo, demonstramos como configurar todos os serviços para usar o secret
TLSsecret
:apiVersion: networking.istio.io/v1alpha3 kind: Gateway metadata: ... # other skipped configuration ... spec: selector: istio: ingressgateway servers: - hosts: - "*" port: name: http number: 80 protocol: HTTP - hosts: - "*" port: name: https number: 443 protocol: HTTPS tls: mode: SIMPLE credentialName: TLSsecret
- Configure serviços individuais:
Este exemplo demonstra como configurar individualmente os três serviços que veiculam o tráfego da Internet:
apiVersion: networking.istio.io/v1alpha3 kind: Gateway metadata: ... # other skipped configuration ... spec: selector: istio: ingressgateway servers: - hosts: - "*" port: name: http number: 80 protocol: HTTP - hosts: - prodservice.prodnamespace.my-custom-domain.com port: number: 443 name: https-prodservice protocol: HTTPS tls: mode: SIMPLE credentialName: TLSsecret - hosts: - experiment.namespace.my-custom-domain.com port: number: 443 name: https-experiment protocol: HTTPS tls: mode: SIMPLE credentialName: TLSsecret - hosts: - fallbackservice.anothernamespace.my-custom-domain.com port: number: 443 name: https-fallbackservice protocol: HTTPS tls: mode: SIMPLE credentialName: anotherTLSsecret