En este tema se explica cómo configurar certificados TLS personalizados para Pinniped en Tanzu Kubernetes Grid.
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:
ClusterIssuer personalizado o su propio secreto TLS. Consulte Establecer un recurso ClusterIssuer o un secreto TLS a continuación.ClusterIssuer o un secreto TLSSi desea utilizar un recurso ClusterIssuer para generar los certificados TLS:
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.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.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:
Recupere la dirección IP o el nombre de host de DNS del servicio Pinniped, pinniped-supervisor:
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
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
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.
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.
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.
Para aplicar los cambios, actualice la configuración de Pinniped siguiendo los pasos que se indican a continuación:
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.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
...
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
Confirme que los cambios se han aplicado correctamente:
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
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.