Saiba como configurar o Knative serving 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 Cloud 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 do Knative serving
que usam o
gateway de entrada
para exibir o 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 você tiver instalado o Cloud Service Mesh usando 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 Cloud 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 do Knative serving. 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 implantados do Knative serving.
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