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
gateway de entrada
para veicular 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 Cloud 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 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 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 o Knative serving implantado .
Exemplos
- 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