Gestión de certificados y secretos TLS y no TLS
Aprenda a utilizar certificados y secretos en el clúster.
Considere la posibilidad de utilizar Secrets Manager para gestionar de forma centralizada y actualizar automáticamente los secretos.
Gestión de certificados y secretos TLS con Ingress
El certificado TLS de Ingress se almacena como un secreto de Kubernetes. Para gestionar los secretos TLS en el clúster, puede utilizar el conjunto de mandatos ibmcloud ks ingress secret
.
Por ejemplo, puede importar un certificado de Secrets Manager a un secreto de Kubernetes en el clúster ejecutando el mandato siguiente.
ibmcloud ks ingress secret create --cluster <cluster_name_or_ID> --cert-crn <crn> --name <secret_name> --namespace default
Para importar el certificado con el mandato ibmcloud ks ingress secret create
, debe tener una instancia predeterminada de Secrets Manager registrada en el clúster. Si no
tiene una instancia de Secrets Manager y, en su lugar, los secretos se escriben directamente en el clúster, los secretos no tienen el valor de CRN necesario y debe copiarlos manualmente con mandatos kubectl
.
Para ver todos los secretos de Ingress para certificados TLS en el clúster, ejecute el mandato siguiente.
ibmcloud ks ingress secret ls -c <cluster>
Configuración de secretos TLS para el subdominio de Ingress proporcionado por IBM
IBM proporciona un subdominio de Ingress y un certificado TLS predeterminado, almacenado como un secreto de Kubernetes en el clúster, que puede especificar en el recurso de Ingress. Los certificados TLS proporcionados por IBM están firmados por LetsEncrypt y están gestionados por completo por IBM.
El comodín del subdominio de Ingress proporcionado por IBM, *.<cluster_name>.<globally_unique_account_HASH>-0000.<region>.containers.appdomain.cloud
, está registrado de forma predeterminada para el clúster. El
certificado TLS proporcionado por IBM es un certificado comodín, y se puede utilizar para el subdominio comodín.
Siga los pasos para utilizar el certificado TLS predeterminado para el subdominio de Ingress proporcionado por IBM.
-
Obtenga el nombre del secreto donde se almacena el certificado TLS predeterminado. Tenga en cuenta que este es el nombre de secreto que especifica en la sección
spec.tls
del recurso de Ingress.ibmcloud ks cluster get -c <cluster> | grep Ingress
Salida de ejemplo
Ingress Subdomain: mycluster-<hash>-0000.us-south.containers.appdomain.cloud Ingress Secret: mycluster-<hash>-0000
-
Vea los detalles del secreto y anote el valor de CRN. Es el CRN del certificado TLS. Si no tiene una instancia predeterminada de [Secrets Manager] registrada en el clúster, el secreto no tiene un CRN. Consulte la nota en el paso siguiente para obtener más detalles.
ibmcloud ks ingress secret get -c <cluster> --name <secret_name> --namespace default
-
Cree un secreto para el certificado TLS predeterminado en cada espacio de nombres donde existan los recursos o apps de Ingress. Especifique el CRN de certificado TLS con la opción de mandato
--cert-crn
.De forma alternativa, puede establecer el secreto como
defaultCertificate
en el mapa de configuraciónibm-ingress-deploy-config
.ibmcloud ks ingress secret create --cluster <cluster_name_or_ID> --cert-crn <CRN> --name <secret_name> --namespace default
Para copiar el secreto con el mandato
ibmcloud ks ingress secret create
, debe tener una instancia predeterminada de Secrets Manager registrada en el clúster. Si no tiene una instancia de Secrets Manager y, en su lugar, los secretos se escriben directamente en el clúster, los secretos no tienen el valor de CRN necesario y debe copiarlos manualmente con mandatoskubectl
.
Configuración de secretos TLS para subdominios personalizados
Si define un subdominio personalizado en el recurso de Ingress, puede utilizar su propio certificado TLS para gestionar la terminación de TLS. Debe crear un secreto de Kubernetes para almacenar el certificado TLS y, a continuación, importar este secreto en cada espacio de nombres donde existan las apps.
Al almacenar certificados TLS personalizados en Secrets Manager, puede importar los certificados directamente en un secreto de Kubernetes en el clúster.
-
Cree o importe un secreto para el certificado TLS en el espacio de nombres donde existe el recurso de Ingress. Por ejemplo, puede importar un secreto de Secrets Manager en el clúster ejecutando el mandato siguiente. Especifique el CRN del certificado TLS con la opción de mandato
--cert-crn
.Para importar el certificado con el mandato
ibmcloud ks ingress secret create
, debe tener una instancia predeterminada de Secrets Manager registrada en el clúster. Si no tiene una instancia de Secrets Manager y, en su lugar, los secretos se escriben directamente en el clúster, los secretos no tienen el valor de CRN necesario y debe copiarlos manualmente con mandatoskubectl
.ibmcloud ks ingress secret create --name <secret_name> --cluster <cluster_name_or_ID> --cert-crn <certificate_crn> --namespace default
-
Repita el paso anterior para cada espacio de nombres donde existan las apps.
Gestión de secretos no TLS
Para gestionar secretos no TLS, puede utilizar los mandatos ibmcloud ks ingress secret
.
Hay 4 tipos de secretos no TLS:
- Los secretos arbitrarios contienen un valor de serie.
- Las credenciales de IAM contienen una clave de API de IAM.
- Secretos de nombre de usuario y contraseña contienen un nombre de usuario y una contraseña como dos valores separados.
- Los valores de clave contienen valores JSON.
Descubra cómo puede gestionar de forma centralizada sus secretos no TLS con IBM Cloud Secrets Manager. Con Secrets Manager, puede crear secretos Kubernetes gestionados, actualizar los secretos automáticamente, crear grupos de secretos que controlen quién tiene acceso a los secretos del clúster, etc.
Creación de un secreto no TLS en el clúster
Cree un secreto no TLS especificando la opción --type Opaque
en el mandato ibmcloud ks ingress secret create
. Con el tipo Opaque
, puede incluir varios valores de CRN que no sean de certificado.
Si no se especifica la opción --type
, TLS se aplica de forma predeterminada. Para obtener más información y opciones de mandato adicionales, consulte la Referencia de CLI.
El siguiente mandato de ejemplo crea un secreto no TLS con el tipo Opaque
especificado. Los secretos no TLS requieren al menos un campo secreto. Tenga en cuenta que la forma en que especifica la
opción --field
varía en función del tipo de secreto que cree.
ibmcloud ks ingress secret create -c cluster-test --name example-secret --namespace default --field crn:v1:bluemix:public:secrets-manager:us-south:a/1aa111aa1a11111aaa1a1111aa1aa111:111a1111-11a1 --type Opaque
Para verificar que se ha creado el secreto, liste todos los secretos del espacio de nombres.
kubectl get secret -n default
El ejemplo siguiente muestra la salida.
NAME TYPE DATA AGE
all-icr-io kubernetes.io/dockerconfigjson 1 41h
default-token-8t6xw kubernetes.io/service-account-token 3 41h
example-secret Opaque 3m
Gestión de campos secretos no TLS
Un campo de secreto es un par de clave-valor que se almacena en un secreto no TLS. Consulte los ejemplos siguientes para ver, añadir, actualizar o eliminar campos secretos no TLS.
Visualización de valores de campo
Puede ver los valores de los campos de un secreto obteniendo los detalles del secreto.
kubectl get secret -n default example-secret -o yaml
La salida de ejemplo siguiente muestra los campos de secreto y sus valores en la sección data
.
apiVersion: v1
data:
arbitraryFVT: AAAaaAAaAAA1AAAaaAAa
userCredsFVT_password: aAAaa1aaaA=
userCredsFVT_username: aAAaaa==
kind: Secret
metadata:
annotations:
ingress.cloud.ibm.com/cert-source: ibm
razee.io/build-url: https://travis.ibm.com/alchemy-containers/armada-ingress-secret-mgr/builds/78876583
razee.io/source-url: https://github.ibm.com/alchemy-containers/armada-ingress-secret-mgr/commit/651fa822632128163cf638c47f0a14b1e0e2915a
creationTimestamp: "2022-11-08T19:45:05Z"
name: example-secret
namespace: default
resourceVersion: "111111"
uid: 1aaa1111-1a11-111a-a1a1-11111a1a1a1a
type: Opaque
También puede listar los campos en un secreto con los mandatos ibmcloud ks ingress secret field ls
y ibmcloud ks ingress secret get
, pero las salidas sólo incluyen el nombre de campo y no el valor asociado a él.
Adición de un campo de secreto
Añada un campo de secreto a un secreto no TLS ejecutando el mandato ibmcloud ks ingress secret field add
con la opción --field
.
También puede utilizar esta opción para añadir campos al crear un secreto con el mandato ibmcloud ks ingress secret create
.
Esta opción no está soportada para secretos TLS.
Hay tres formas de especificar la opción --field
. El que elija depende del tipo de secreto y de cómo desee nombrar el campo en el secreto.
Opción | Formato | Descripción | Tipos de secretos soportados |
---|---|---|---|
Valor predeterminado | --field <crn> |
El nombre del campo añadido es el nombre de campo predeterminado para el tipo de secreto del CRN especificado. | Todos los tipos de secreto no TLS |
con nombre | --field <name>=<crn> |
Utilice esta opción para especificar un nombre para el campo añadido. El nombre del campo añadido es el valor especificado para <name> . |
-Arbitrario -credenciales de IAM |
Con prefijo | --field prefix=<crn> |
El nombre del campo añadido es el nombre de campo predeterminado para el tipo de secreto especificado por el CRN especificado, con el prefijo del nombre del secreto especificado por el <crn> y un carácter de subrayado. |
-Credenciales de IAM -username/password -key/value |
Los nombres de campo predeterminados son arbitrary
para secretos arbitrarios, api_key
para credenciales de IAM, username
o password
para credenciales de usuario y key
para
valor de clave.
El ejemplo siguiente añade tres campos secretos-utilizando el mismo secreto de credenciales de IAM, denominado iam
-para mostrar cómo las distintas opciones de --field
afectan al nombre de campo resultante. Puede
ver los campos añadidos a un secreto ejecutando kubectl get secret
y visualizando el bloque data
de la salida.
ibmcloud ks ingress secret field add --cluster example-cluster --name example-iam-secret --namespace default --field crn:v1:bluemix:public:secrets-manager:us-south:a/1aa111aa-1a11-111a-aa1a-1111aa1aa111:secret:111a1111-11a1-11aa-a1a1-111aa12345aa --field custom_iam_name=crn:v1:bluemix:public:secrets-manager:us-south:a/1aa111aa-1a11-111a-aa1a-1111aa1aa111:secret:111a1111-11a1-11aa-a1a1-111aa12345aa --field prefix=crn:v1:bluemix:public:secrets-manager:us-south:a/1aa111aa-1a11-111a-aa1a-1111aa1aa111:secret:111a1111-11a1-11aa-a1a1-111aa12345aa
Campos de ejemplo listados en el bloque data
de los detalles del secreto.
data:
api_key: bmZrUHR1VS1fNVpMOExsTmIxeTdQcXFTSENMc2pTUjRsNTQyTzZkZ2ZQMkk= # Default field type using the default `api_key` field name
custom_iam_name: bmZrUHR1VS1fNVpMOExsTmIxeTdQcXFTSENMc2pTUjRsNTQyTzZkZ2ZQMkk= # Named field type using the specified `custom_iam_name` field name.
iam_api_key: bmZrUHR1VS1fNVpMOExsTmIxeTdQcXFTSENMc2pTUjRsNTQyTzZkZ2ZQMkk= # Prefixed field type using the `iam` name in Secrets Manager followed by the `api_key` default name.
Actualización de campos de secreto
Ejecute el mandato ingress secret update
para actualizar los valores de un campo secreto. Tenga en cuenta que esto no actualiza el CRN. Para obtener más información y opciones de mandato, consulte la Referencia de CLI.
ibmcloud ks ingress secret update --cluster example-cluster --name example-secret --namespace default
Eliminación de un campo de secreto
Puede eliminar un campo de secreto de un secreto no TLS. Para obtener más información y opciones de mandato, consulte la Referencia de CLI.
ibmcloud ks ingress secret field rm -c example-cluster --name example-secret --namespace default --field-name example-Field
Puede verificar que el campo se ha eliminado comprobando el bloque data
de los detalles del secreto.
kubectl get secret -n default example-secret -o yaml
Preguntas más frecuentes sobre secretos
Revise las respuestas a las preguntas más frecuentes sobre la gestión de secretos en el clúster.
- ¿Se actualizan automáticamente mis secretos si no creo y registro una instancia de Secrets Manager ?
- Si no registra una instancia de Secrets Manager en el clúster, los secretos de Ingress predeterminados continúan actualizándose automáticamente cada 90 días y se aplican al clúster. Sin embargo, los secretos que ha creado que hacen referencia al secreto de Ingress predeterminado no se actualizan automáticamente.
- Escenario de ejemplo: tiene un certificado de Ingress predeterminado en el espacio de nombres de
default
. Ejecute el mandatoibmcloud ks ingress secret create
y haga referencia al CRN del certificado de Ingress predeterminado para duplicar el certificado en el espacio de nombresistio-system
. Sin una instancia de Secrets Manager, el certificado de Ingress predeterminado del espacio de nombresdefault
se actualiza automáticamente. Sin embargo, es responsable de actualizar regularmente el certificado en el espacio de nombresistio-system
con los mandatos**kubectl**
u otro método de rotación. - He creado secretos que hacen referencia al certificado de Ingress predeterminado, pero no he creado y registrado una instancia de Secrets Manager. ¿Cómo puedo gestionar mis secretos?
- Si no registra una instancia de Secrets Manager, IBM Cloud Kubernetes Service sólo actualiza automáticamente el secreto de Ingress predeterminado. Usted es responsable de gestionar cualquier otro secreto utilizando mandatos
kubectl
u otro método de rotación. Si los secretos hacen referencia al certificado de Ingress predeterminado, elimínelos utilizandoibmcloud ks ingress secret rm
.