ingress-controller usa cert-manager para emitir certificados gratuitos

cert-manager es un proyecto de código abierto de gestión de certificados nativa de la nube que se utiliza para proporcionar certificados HTTPS y renovarlos automáticamente en un clúster de Kubernetes, y admite la emisión de certificados gratuitos como Let's Encrypt y HashiCorp Vault. En un clúster de Kubernetes, podemos implementar HTTPS automatizado para servicios externos a través de Kubernetes Ingress y Let's Encrypt.
Hoy configuraremos el controlador de entrada de kubernetes para que use cert-manager para emitir comunicaciones gratuitas e implementar solicitudes de acceso normales.

Introducción al medio ambiente:

Nombre de host Caracteristicas dirección IP
equilibrio de carga Balanceador de carga responsable de simular el entorno de nube pública 172.20.128.49
Maestro entorno de nodo único k8s 172.20.128.50 **

Diagrama de topología experimental:

ingress-controller usa cert-manager para emitir certificados gratuitos

Descripción experimental: debido a que el entorno experimental no tiene un dispositivo de equilibrio de carga de nube pública, aquí se utiliza haproxy para reemplazar el equilibrio de carga del entorno de nube pública. Finalmente, todo el proceso de solicitud es que la solicitud del cliente se envía a haproxy, y luego la solicitud se reenvía al nodo k8s-master. El servicio de ingress-nginx expuso su eslogan a través de nodeport.

1. Primero ejecute un nginx Pod como recurso de prueba y luego acceda a él a través del puerto externo expuesto de ingress-nginx.

Cree un espacio de nombres de cert-manager como el espacio de nombres de prueba
kubectl cree ns cert-manager

y luego cree una lista de recursos para generar los recursos de prueba necesarios

apiVersion: apps/v1
kind: Deployment
metadata:
    name: myapp-deploy
    namespace: cert-manager
spec:
    replicas: 1
    selector:
      matchLabels:
        app: httpd
    template:
      metadata:
        labels:
          app: httpd
    spec:
        containers:
        - name: httpd
          image: httpd:latest
          ports:
          - name: http
            containerPort: 80
          - name: https
            containerPort: 443
---
apiVersion: v1
kind: Service
metadata:
    name: http-service
    namespace: cert-manager
spec:
    selector:
    app: httpd
  type: ClusterIP
  ports:
     - port: 80
       targetPort: 80

En este punto, vemos los recursos en todo el espacio de nombres de cert-manager
y usamos el comando curl para solicitar directamente el servicio nginx en el nodo k8s.

ingress-controller usa cert-manager para emitir certificados gratuitos

2. Agrega una regla de acceso para el ingreso.

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: http-ingress
  namespace: cert-manager
  annotations:
    kubernetes.io/ingress.class: "nginx"
spec:
  rules:
    - host: httpd.test.com
      http:
        paths:
          - path:
            backend:
              serviceName: http-service
              servicePort: 80

En el archivo de hosts locales, resuelva la dirección IP del nodo principal con el nombre de dominio especificado por la regla de entrada y luego envíe una solicitud al navegador para su verificación
ingress-controller usa cert-manager para emitir certificados gratuitos

3. A continuación, utilice el componente de gestión de cert-manager para configurar la estrategia de generación de certificados.

apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
   name: letsencrypt-http01
   namespace: cert-manager
spec:
   selfSigned: {}

Configurar certificado

apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
   name: httpd-test-com
   namespace: cert-manager
spec:
   dnsNames:
   - httpd.test.com # 要签发证书的域名
   issuerRef:
     name: letsencrypt-http01 # 引用 Issuer,指示采用 http01 方式进行校验
   secretName: httpd-test-com # 最终签发出来的证书会保存在这个 Secret 里面

Verifique el certificado recién generado, k8s lo ha encapsulado en secreto
kubectl get certificate -n cert-manager
ingress-controller usa cert-manager para emitir certificados gratuitos

4. Modifique la regla de acceso de ingreso en este momento y agregue un campo de autenticación tls.

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: http-ingress
  namespace: cert-manager
  annotations:
    kubernetes.io/ingress.class: "nginx"
spec:
  rules:
    - host: httpd.test.com
      http:
        paths:
          - path:
            backend:
              serviceName: http-service
              servicePort: 80
  tls:
    - hosts:
        - httpd.test.com                 # ingress定义的域名
      secretName: httpd-test-com     # Certificate资源清单中定义的secretName

Utilice el protocolo https para solicitar en el navegador, en este momento debe solicitar el puerto 32232

ingress-controller usa cert-manager para emitir certificados gratuitos

Debido a que es un certificado autofirmado, le indicará que la conexión no es segura. Dado que no hay equilibrio de carga en el entorno de prueba local, la dirección que usamos para acceder al servicio es el nombre de dominio más el número de puerto. En este momento, haproxy se puede utilizar para simular una configuración de equilibrio de carga.

5. Modifique el archivo de configuración haproxy para que las solicitudes del cliente proxy al nodo maestro

global
    log         127.0.0.1 local2
    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy
    group       haproxy
    daemon

defaults
    mode                    tcp
    log                     global
    retries                 3
    timeout connect         10s
    timeout client          1m
    timeout server          1m

frontend kube-apiserver
    bind *:443 # 指定前端端口
    mode tcp
    default_backend master

backend master # 指定后端机器及端口,负载方式为轮询
    balance roundrobin
    server master  172.20.128.50:32232 check maxconn 2000     // 此处指定的是master节点ingress-nginx暴漏的用于https协议的端口号

Luego modificamos la resolución del nombre de dominio original en el archivo de hosts locales del cliente a la dirección actual de
haproxy 172.20.128.49 httpd.test.com y
usamos el nombre de dominio directamente en el navegador para probar

ingress-controller usa cert-manager para emitir certificados gratuitos
todo el ejemplo de configuración.

Supongo que te gusta

Origin blog.51cto.com/11970509/2545427
Recomendado
Clasificación