controlador de certificado cert-manager
El administrador de certificados se ejecuta en un clúster de Kubernetes como una serie de recursos de implementación. Se CustomResourceDefinitions
utiliza para configurar la autoridad de certificación y la solicitud de certificado.
Utiliza un manifiesto YAML normal para la implementación, como cualquier otra aplicación en Kubernetes.
Después de implementar el administrador de certificados, debe configurar Issuer
o ClusterIssuer
representar los recursos de la autoridad de certificación. Para Issuer
obtener más información sobre los diferentes tipos de configuraciones , consulte sus respectivas guías de configuración .
Nota: A partir de cert-manager
v0.14.0
, la versión mínima admitida de Kubernetes esv1.11.0
.v1.10
Los usuarios que todavía ejecutan Kubernetes o versiones anteriores deben actualizar a una versión compatible antes de instalar cert-manager.Advertencia : No debe instalar varias instancias de cert-manager en un solo clúster. Esto dará lugar a un comportamiento incierto y es posible que proveedores como "Let's Encrypt" lo prohíban.
Instalar el controlador de certificados
Todos los recursos ( CustomResourceDefinitions
, cert-manager, espacio de nombres y componentes de webhook) están contenidos en un solo archivo de manifiesto YAML:
Nota : Si está utilizando las
kubectl
siguientes versionesv1.19.0-rc.1
, encontrará problemas al actualizar el CRD. Para obtener más información, consulte las instrucciones de actualización v0.16
Instalación CustomResourceDefinitions
y cert-manager en sí:
# Kubernetes 1.16+
kubectl create namespace cert-manager
kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/v1.0.3/cert-manager.yaml
Nota : Si está utilizando la versión de Kubernetes a continuación
v1.15
, debe instalar la versión anterior del manifiesto. No hay conversión de versión de API para esta versión, solo se admiten loscert-manager.io/v1
recursos de API.Nota : Si está ejecutando Kubernetes
v1.15.4
o una versión anterior, necesita un comando en la parte superior--validate=false
de la marcakubectl apply
, o recibirá campos relacionados con los recursos de errores de validación delx-kubernetes-preserve-unknown-fields
administrador deCustomResourceDefinition
certificados. Este es un error benigno quekubectl
ocurre debido a la forma en que se realiza la verificación de recursos.Nota : cuando se ejecuta en GKE (Google Kubernetes Engine), es posible que encuentre un error de "Permiso denegado" al crear algunos de estos recursos. Esta es una forma de manejar los matices de los permisos de GKE e IAM RBAC, por lo que al ejecutar el comando anterior antes , sus privilegios deben "actualizarse" para los privilegios de "administrador de clúster". Si ya ha ejecutado los comandos anteriores, debe ejecutarlos nuevamente después de privilegios elevados:
kubectl create clusterrolebinding cluster-admin-binding \ --clusterrole=cluster-admin \ --user=$(gcloud config get-value core/account)
Nota : De forma predeterminada, cert-manager se instalará en el
cert-manager
espacio de nombres. Aunque necesita modificar el manifiesto de implementación, puede ejecutar cert-manager en otros espacios de nombres.
verificación
kubectl get pods --namespace cert-manager
NAME READY STATUS RESTARTS AGE
cert-manager-5c6866597-zw7kh 1/1 Running 0 2m
cert-manager-cainjector-577f6d9fd7-tr77l 1/1 Running 0 2m
cert-manager-webhook-787858fcdb-nlzsq 1/1 Running 0 2m
Crear un emisor de certificado de clúster de CA
El administrador de certificados requiere recursos del Emisor o del ClusterIssuer para emitir certificados. Ambos recursos de Kubernetes son funcionalmente idénticos, la diferencia se Issuer
aplica a un solo espacio de nombres y se ClusterIssuer
aplica a todos los espacios de nombres. Consulte la documentación del emisor del administrador de certificados para obtener más detalles .
Utilice la siguiente lista de comprobación de muestra para crear un emisor de certificado de clúster, por ejemplo cluster-issuer.yaml
. Actualice la dirección de correo electrónico a una dirección válida proporcionada por la organización:
apiVersion: cert-manager.io/v1alpha2
kind: ClusterIssuer
metadata:
name: letsencrypt
spec:
acme:
server: https://acme-v02.api.letsencrypt.org/directory
email: MY_EMAIL_ADDRESS
privateKeySecretRef:
name: letsencrypt
solvers:
- http01:
ingress:
class: nginx
podTemplate:
spec:
nodeSelector:
"kubernetes.io/os": linux
Para crear el emisor del certificado, use el kubectl apply
comando.
kubectl apply -f cluster-issuer.yaml
Implementar la ruta de entrada de Ingress
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
#指定ca证书颁发者
cert-manager.io/cluster-issuer: letsencrypt
k8s.kuboard.cn/workload: web-phpipam
labels:
k8s.kuboard.cn/layer: web
k8s.kuboard.cn/name: web-phpipam
name: web-phpipam
namespace: ingress-basic
spec:
rules:
- host: phpipam.www.trusit.net
http:
paths:
- backend:
serviceName: web-phpipam
servicePort: 80
path: /
# 配置证书名称
tls:
- hosts:
- phpipam.www.trusit.net
secretName: tls-secret
Utilice el kubectl apply
comando para crear recursos de entrada.
kubectl apply -f hello-world-ingress.yaml --namespace ingress-basic
Verifique que se haya creado el objeto de certificado
A continuación, se debe crear un recurso de certificado. El recurso de certificado define el certificado X.509 requerido. Para obtener más información, consulte Certificado de administrador de certificados . El administrador de certificados ha utilizado ingress-shim (implementado automáticamente con el administrador de certificados desde v0.2.2) para crear automáticamente un objeto de certificado para usted. Para obtener más información, consulte la documentación de compensación de entrada .
Para verificar si el certificado se ha creado correctamente, utilice el kubectl get certificate --namespace ingress-basic
comando y verifique que READY sea True , puede tardar varios minutos
$ kubectl get certificate --namespace ingress-basic
NAME READY SECRET AGE
tls-secret True tls-secret 11m
Configuración de entrada de prueba
Abra el navegador web para hello-world-ingress.MY_CUSTOM_DOMAIN del controlador de entrada de Kubernetes . Tenga en cuenta que el sistema le redirigirá para que utilice HTTPS. El certificado es de confianza y la aplicación de demostración se muestra en el navegador web. Agregue la ruta y observe que se muestra la segunda aplicación de demostración con un título personalizado.
Limpiar recursos
Este artículo utiliza Helm para instalar componentes del portal, certificados y aplicaciones de muestra. Cuando se implementa el gráfico de Helm, se crean varios recursos de Kubernetes. Estos recursos incluyen pods, implementaciones y servicios. Para limpiar estos recursos, puede eliminar todo el espacio de nombres de ejemplo o puede eliminar recursos individuales.
Eliminar el espacio de nombres de ejemplo y todos los recursos
Para eliminar todo el ejemplo de un espacio de nombres, use el kubectl delete
comando y especifique el nombre del espacio de nombres. Se eliminarán todos los recursos del espacio de nombres.
Copia de consola
kubectl delete namespace ingress-basic
Eliminar recursos individualmente
También puede utilizar un método más detallado para eliminar un único recurso creado. Primero, elimine el recurso emisor del clúster:
Copia de consola
kubectl delete -f cluster-issuer.yaml --namespace ingress-basic
Use el helm list
comando para listar la versión de Helm. Busque los gráficos denominados "nginx" y "cert-manager", como se muestra en el siguiente resultado de muestra:
Copiar
$ helm list --namespace ingress-basic
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
cert-manager ingress-basic 1 2020-01-15 10:23:36.515514 -0600 CST deployed cert-manager-v0.13.0 v0.13.0
nginx ingress-basic 1 2020-01-15 10:09:45.982693 -0600 CST deployed nginx-ingress-1.29.1 0.27.0
Utilice helm uninstall
el comando desinstalar estas versiones. El siguiente ejemplo desinstalará el portal NGINX y la implementación del administrador de certificados.
Copiar
$ helm uninstall cert-manager nginx --namespace ingress-basic
release "cert-manager" uninstalled
release "nginx" uninstalled
A continuación, elimine las dos aplicaciones de muestra:
Copia de consola
kubectl delete -f aks-helloworld-one.yaml --namespace ingress-basic
kubectl delete -f aks-helloworld-two.yaml --namespace ingress-basic
Elimina la ruta de entrada que dirige el tráfico a la aplicación de muestra:
Copia de consola
kubectl delete -f hello-world-ingress.yaml --namespace ingress-basic
Finalmente, puede eliminar su propio espacio de nombres. Utilice kubectl delete
el comando y especifique el nombre del espacio de nombres.
Copia de consola
kubectl delete namespace ingress-basic