Controlador de certificados Scert-manager para Kubernetes (emisión automática de certificados)

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 CustomResourceDefinitionsutiliza 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 Issuero ClusterIssuerrepresentar los recursos de la autoridad de certificación. Para Issuerobtener 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 es v1.11.0. v1.10Los 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 kubectlsiguientes versiones v1.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 CustomResourceDefinitionsy 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 los cert-manager.io/v1recursos de API.

Nota : Si está ejecutando Kubernetes v1.15.4o una versión anterior, necesita un comando en la parte superior --validate=falsede la marca kubectl apply, o recibirá campos relacionados con los recursos de errores de validación del x-kubernetes-preserve-unknown-fieldsadministrador de CustomResourceDefinitioncertificados. Este es un error benigno que kubectlocurre 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-managerespacio 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 Issueraplica a un solo espacio de nombres y se ClusterIssueraplica 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 applycomando.

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 applycomando 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-basiccomando 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 deletecomando 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 listcomando 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 uninstallel 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 deleteel comando y especifique el nombre del espacio de nombres.

Copia de consola

kubectl delete namespace ingress-basic

Supongo que te gusta

Origin blog.csdn.net/weixin_43357497/article/details/111188191
Recomendado
Clasificación