Como usar seus próprios certificados TLS

Esta página descreve como configurar o Cloud Run para Anthos no Google Cloud usando seu próprio certificado SSL/TLS, nos casos em que você não quer utilizar certificados TLS gerenciados.

O gateway de entrada do Istio é compatível com o protocolo TLS fornecido pelo seu certificado depois que você o armazena em um secret do Kubernetes e o especifica no gateway de entrada do Istio.

Antes de começar

Para seguir estas instruções, é necessário ter seus próprios certificados TLS.

Como armazenar um certificado TLS/chave privada em um secret do Kubernetes

Para armazenar os certificados em um secret:

  1. Copie os certificados no seu diretório atual.

  2. Use o comando a seguir para criar um secret que armazene os certificados, em que privkey.pem contém sua chave privada de certificado e fullchain.pem contém o certificado público:

    kubectl create --namespace gke-system secret tls SECRET_NAME \
      --key privkey.pem \
      --cert fullchain.pem
    

Como especificar o certificado TLS para o gateway de entrada do Istio

Modifique a especificação do gateway de entrada do Istio para usar o Kubernetes Secret que contém seu certificado TLS:

  1. Abra a especificação do gateway compartilhado para edição:

    kubectl edit gateway gke-system-gateway --namespace knative-serving
  2. Especifique o certificado TLS usando o secret criado anteriormente. Basta adicionar a seguinte seção à especificação do gateway:

    - hosts:
      - "*"
      port:
        name: https
        number: 443
        protocol: HTTPS
      tls:
        mode: SIMPLE
        credentialName: SECRET_NAME
    

    As especificações do gateway ficarão assim:

    apiVersion: networking.istio.io/v1alpha3
    kind: Gateway
    metadata:
    # ... skipped ...
    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: SECRET_NAME
    

    Se você estiver adicionando vários certificados TLS para dois serviços diferentes em diferentes namespaces, a especificação do gateway poderá ter esta aparência:

    apiVersion: networking.istio.io/v1alpha3
    kind: Gateway
    metadata:
    # ... skipped ...
    spec:
      selector:
        istio: ingressgateway
      servers:
      - hosts:
        - "*"
        port:
          name: http
          number: 80
          protocol: HTTP
      - port:
          number: 443
          name: https-SERVICE1_NAME
          protocol: HTTPS
        tls:
          mode: SIMPLE
          credentialName: SECRET1_NAME
        hosts:
        - SERVICE1_NAME.NAMESPACE1.example.com
      - port:
          number: 443
          name: https-SERVICE2_NAME
          protocol: HTTPS
        tls:
          mode: SIMPLE
          credentialName: SECRET2_NAME
        hosts:
        - SERVICE2_NAME.NAMESPACE2.example.com
    
  3. Salve as alterações.

Após essa alteração, use o protocolo HTTPS para acessar seus serviços implantados.