Configurar y administrar certificados TLS para Pinniped

En este tema se explica cómo configurar certificados TLS personalizados para Pinniped en Tanzu Kubernetes Grid.

Configurar certificados TLS personalizados

De forma predeterminada, Tanzu Kubernetes Grid utiliza un Issuer autofirmado para generar los certificados TLS que protegen el tráfico HTTPS a Pinniped. Opcionalmente, puede actualizar la configuración predeterminada después de implementar el clúster de administración de la siguiente manera:

  1. Establezca un recurso ClusterIssuer personalizado o su propio secreto TLS. Consulte Establecer un recurso ClusterIssuer o un secreto TLS a continuación.
  2. Actualice la configuración de Pinniped volviendo a implementar el secreto del complemento pinniped para el clúster de administración. Consulte Actualizar la configuración de Pinniped a continuación.

Establecer un recurso ClusterIssuer o un secreto TLS

Si desea utilizar un recurso ClusterIssuer para generar los certificados TLS:

  1. Compruebe que cert-manager se esté ejecutando en el clúster de administración. Este componente se ejecuta de forma predeterminada en todos los clústeres de administración.
  2. Obtenga el nombre de un recurso ClusterIssuer existente en el clúster de administración. Para obtener más información, consulte Configuración del emisor en la documentación de cert-manager.
  3. Especifique el nombre ClusterIssuer en el campo custom_cluster_issuer de la sección values.yaml del secreto del complemento Pinniped para el clúster de administración y, a continuación, aplique los cambios. Para obtener instrucciones, consulte Actualizar la configuración de Pinniped a continuación. Después de completar los pasos de esta sección, la cadena de certificados de Pinniped será firmada por su ClusterIssuer.

Si desea especificar su propio secreto TLS directamente:

  1. Recupere la dirección IP o el nombre de host de DNS del servicio Pinniped, pinniped-supervisor:

    • Si el tipo de servicio se establece en LoadBalancer (vSphere con un equilibrador de carga, por ejemplo, NSX Advanced Load Balancer, Amazon Web Services [AWS] o Azure), recupere la dirección externa del servicio ejecutando:
    kubectl get service pinniped-supervisor -n pinniped-supervisor
    
    • Si el tipo de servicio se establece en NodePort (vSphere sin un equilibrador de carga), la dirección IP del servicio es la misma que el endpoint del plano de control de vSphere. Para recuperar la dirección IP, puede ejecutar el siguiente comando:
    kubectl get configmap cluster-info -n kube-public -o yaml
    
  2. Cree un secreto de kubernetes.io/tls en el espacio de nombres pinniped-supervisor. Para crear un secreto TLS, ejecute:

    kubectl create secret generic SECRET-NAME -n pinniped-supervisor --type kubernetes.io/tls --from-file tls.crt=FILENAME-1.crt --from-file tls.key=FILENAME-2.pem --from-file ca.crt=FILENAME-3.pem
    

    Reemplace el texto de marcador de posición de la siguiente manera:

    • SECRET-NAME es el nombre que eligió para el secreto. Por ejemplo, my-secret.
    • FILENAME-* es el nombre de sus tls.crt, tls.key o ca.crt. El certificado TLS que especifique en el secreto de TLS para Pinniped debe incluir la IP o el nombre de host DNS del servicio Pinniped del paso anterior. El campo ca.crt es obligatorio y contiene el paquete de CA que se utiliza para comprobar el certificado TLS.

    Por ejemplo, el secreto resultante para Pinniped tiene un aspecto similar al siguiente:

    apiVersion: v1
    kind: Secret
    metadata:
     name: my-secret
     namespace: pinniped-supervisor
    type: kubernetes.io/tls
    data:
     tls.crt: |       MIIC2DCCAcCgAwIBAgIBATANBgkqh ...
     tls.key: |       MIIEpgIBAAKCAQEA7yn3bRHQ5FHMQ ...
     ca.crt:  |       MIIEpgIBAAKCAQEA7yn3bRHQ5FHMQ ...
    

    Si el secreto se generó correctamente, la descodificación tls.crt con openssl x509 -in tls.crt -text muestra la dirección IP o el nombre de host de DNS en el campo Nombre alternativo del sujeto.

  3. Especifique el nombre del secreto en el campo custom_tls_secret de la sección values.yaml del secreto de complemento Pinniped para el clúster de administración y, a continuación, aplique los cambios. Para obtener instrucciones, consulte Actualizar la configuración de Pinniped a continuación.

  4. Si desea configurar un nombre de host de DNS para el servicio Pinniped, especifique el FQDN asociado con un supervisor Pinniped en el campo pinniped.supervisor_svc_external_dns de la sección values.yaml del secreto del complemento Pinniped del clúster de administración. Tenga en cuenta que el valor de pinniped.supervisor_svc_external_dns debe comenzar con https://. Consulte la configuración de values.yaml del paquete administrado automáticamente en detalle. A continuación, aplique los cambios. Para obtener instrucciones, consulte Actualizar la configuración de Pinniped a continuación. Tenga en cuenta que debe configurar el DNS por separado para este nombre de host; por ejemplo, debe crear un registro A en el proveedor de DNS para resolver la dirección IP del servicio de supervisor Pinniped. Este nombre de host debe aparecer como nombre alternativo del asunto en el certificado TLS que configure para el supervisor Pinniped.

Actualizar la configuración de Pinniped

Para aplicar los cambios, actualice la configuración de Pinniped siguiendo los pasos que se indican a continuación:

  1. Guarde el secreto del complemento Pinniped para el clúster de administración en un archivo y descodifique la cadena con codificación Base64 en la sección values.yaml del secreto.

    kubectl get secret CLUSTER-NAME-pinniped-package -n tkg-system -o jsonpath="{.data.values\.yaml}" | base64 -d > FILENAME.yaml
    

    Reemplace el texto de marcador de posición de la siguiente manera:

    • CLUSTER-NAME es el nombre de su clúster de administración.
    • FILENAME es el nombre de archivo que desea utilizar para el secreto. Por ejemplo, values.yaml.
  2. En el texto decodificado, realice una de las siguientes acciones:

    • Si preparó un recurso ClusterIssuer anterior, especifique el nombre del recurso en el campo custom_cluster_issuer. Por ejemplo:

      ---
      infrastructure_provider: vsphere
      tkg_cluster_role: management
      custom_cluster_issuer: "my-cluster-issuer-name"
      pinniped:
       cert_duration: 2160h
       cert_renew_before: 360h
       supervisor_svc_endpoint: https://10.168.217.220:31234
       supervisor_ca_bundle_data: LS0tLS1CRUdJTiBDRVJUSUZJQ0F……
      ...
      
    • Si preparó su propio secreto TLS anteriormente, especifique el nombre del secreto en el campo custom_tls_secret. Por ejemplo:

      ---
      infrastructure_provider: vsphere
      tkg_cluster_role: management
      custom_tls_secret: "my-tls-secret-name"
      pinniped:
       cert_duration: 2160h
       cert_renew_before: 360h
       supervisor_svc_endpoint: https://10.168.217.220:31234
       supervisor_ca_bundle_data: LS0tLS1CRUdJTiBDRVJUSUZJQ0F……
      ...
      

      Si configura el campo custom_tls_secret, se ignorará el custom_cluster_issuer.

      Si desea configurar un nombre de host de DNS para el servicio Pinniped, especifique el FQDN que se debe utilizar para el supervisor Pinniped en el campo pinniped.supervisor_svc_external_dns. Por ejemplo:

      ...
      pinniped:
      cert_duration: 2160h
      cert_renew_before: 360h
      supervisor_svc_endpoint: https://0.0.0.0:31234
      supervisor_ca_bundle_data: ca_bundle_data_of_supervisor_svc
      supervisor_svc_external_ip: 0.0.0.0
      supervisor_svc_external_dns: https://pinniped.example.com
      ...
      
  3. Vuelva a codificar la sección values.yaml y actualice el secreto del complemento Pinniped. Este comando varía según el sistema operativo del entorno. Por ejemplo:

    Linux:

    kubectl patch secret CLUSTER-NAME-pinniped-package -n tkg-system -p "{\"data\":{\"values.yaml\":\"$(base64 -w 0 < values.yaml)\"}}" --type=merge
    

    macOS:

    kubectl patch secret CLUSTER-NAME-pinniped-package -n tkg-system -p "{\"data\":{\"values.yaml\":\"$(base64 < values.yaml)\"}}" --type=merge
    
  4. Confirme que los cambios se han aplicado correctamente:

    1. Obtenga el estado de la aplicación pinniped:

      kubectl get app CLUSTER-NAME-pinniped -n tkg-system
      

      Si el estado devuelto es Reconciliación fallida, ejecute el siguiente comando para obtener detalles sobre el fallo:

      kubectl get app CLUSTER-NAME-pinniped -n tkg-system -o yaml
      
    2. Para generar un archivo kubeconfig para el clúster de administración, ejecute el comando tanzu mc kubeconfig get --export-file ./KUBECONFIG-MC-CLUSTER-NAME. A continuación, ejecute un comando como kubectl get pods --kubeconfig ./KUBECONFIG-MC-CLUSTER-NAME mediante kubeconfig. Además, si el clúster de administración administra algún clúster de carga de trabajo, ejecute tanzu cluster kubeconfig get <WORKLOAD-CLUSTER-NAME> --export-file ./KUBECONFIG-WORKLOAD-CLUSTER-NAME y, a continuación, kubectl get pods --kubeconfig ./KUBECONFIG-WORKLOAD-CLUSTER-NAME en cada uno de los clústeres existentes.

check-circle-line exclamation-circle-line close-line
Scroll to top icon