如何使用默认Ingress使用Kubernetes microk8s设置Letsencrypt?

qlckcl4x  于 5个月前  发布在  Kubernetes
关注(0)|答案(2)|浏览(71)

最近,我尝试在一台裸机服务器上使用microk8s和默认的ingress控制器设置letsencrypt。
我在网上找到了一些非常有用的指南,但似乎最近对microk8s的更新改变了入口控制器的配置方式。
为了保存你们的时间,我把我做的都写出来了。
这里有一些有用的资源,如果你卡住或获得更好的理解。
https://cert-manager.io/docs/installation/kubernetes/
https://cert-manager.io/docs/tutorials/acme/ingress/
此链接对于故障排除非常有用
https://cert-manager.io/docs/faq/acme/

enxuqcxy

enxuqcxy1#

本指南是使用Microk 8 s和默认Ingress控制器设置Kubernetes的Letsencrypt。
使用的版本:

  • microk 8 s版本1.21/稳定 *
  • 证书管理器v1.3.1*
    **前提条件:**将80和443端口转发到您的服务器,设置指向您服务器的域名。

安装microk 8 s

snap install microk8s --classic --channel=1.21/stable

字符串
启用DNS和入口

sudo microk8s enable dns ingress


我们将使用nginx webserver镜像创建一个测试webserver部署/服务来测试web流量

  • webserver-depl-svc.yaml*
apiVersion: apps/v1
kind: Deployment
metadata:
  name: webserver-depl
spec:
  selector:
    matchLabels:
      app: webserver-app
  template:
    metadata:
      labels:
        app: webserver-app
    spec:
      containers:
        - name: webserver-app
          image: nginx:1.8
---
apiVersion: v1
kind: Service
metadata:
  name: webserver-svc
spec:
  selector:
    app: webserver-app
  ports:
  - name: webserver-app
    protocol: TCP
    port: 80
    targetPort: 80


应用配置文件

sudo microk8s kubectl apply -f webserver-depl-svc.yaml


现在要配置默认入口以服务于测试Web服务器

  • ingress-routes.yaml*
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-routes
spec:
  rules:
#change yourdomain.com to your domain
  - host: yourdomain.com
    http:
      paths:
        - path: /
          pathType: Prefix
          backend:
            service:
              name: webserver-svc
              port:
                number: 80


应用入口路由

sudo microk8s kubectl apply -f ingress-routes.yaml


当您访问 * yourdomain.com * 时,您应该会看到默认的“欢迎来到nginx!”启动画面。
现在安装cert-manager https://cert-manager.io/docs/installation/kubernetes/

sudo microk8s kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.3.1/cert-manager.yaml


下一个命令应该显示3个pod,以确认cert-manager已安装并正在运行

sudo microk8s kubectl get pods -n=cert-manager


现在创建证书颁发者配置。需要注意的一个细节是,在此配置中使用的类是 public 而不是 nginx。这可能是microk 8 s特定的。https://cert-manager.io/docs/tutorials/acme/ingress/


apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: letsencrypt-staging
spec:
  acme:
#change to your email
    email: [email protected]
    server: https://acme-staging-v02.api.letsencrypt.org/directory
    privateKeySecretRef:
      name: letsencrypt-staging
    solvers:
    - http01:
        ingress:
          class: public

  • 莱斯蒙特-普罗德-亚姆 *
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: letsencrypt-prod
spec:
  acme:
    server: https://acme-v02.api.letsencrypt.org/directory
#change to your email
    email: [email protected]
    privateKeySecretRef:
       name: letsencrypt-prod
    solvers:
    - http01:
        ingress:
          class: public


应用两个发行者的身份证

sudo microk8s kubectl apply -f letsencrypt-staging.yaml

sudo microk8s kubectl apply -f letsencrypt-prod.yaml


现在更新 ingress-routes.yaml 以使用暂存证书。

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: ingress-routes
  annotations:
    cert-manager.io/cluster-issuer: "letsencrypt-staging"
spec:
  tls:
  - hosts:
#change to your domain
    - yourdomain.com
    secretName: tls-secret
  rules:
#change to your domain
  - host: yourdomain.com
    http:
      paths:
        - path: /
        pathType: Prefix
        backend:
          service:
            name: webserver-svc
            port:
              number: 80


应用此更新

sudo microk8s kubectl apply -f ingress-routes.yaml


运行下一个命令以确认Ready=True

sudo microk8s kubectl get certificate


如果返回true,则意味着HTTP-01挑战成功。

sudo microk8s kubectl describe certificate tls-secret


现在更改 ingress-routes.yaml 以使用生产证书。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-routes
  annotations:
    cert-manager.io/cluster-issuer: "letsencrypt-prod"
spec:
  tls:
  - hosts:
#change to your domain
    - yourdomain.com
    secretName: tls-secret
  rules:
#change to your domain
  - host: yourdomain.com
    http:
      paths:
        - path: /
        pathType: Prefix
        backend:
          service:
            name: webserver-svc
            port:
              number: 80


应用此更新

sudo microk8s kubectl apply -f ingress-routes.yaml


现在是关键时刻。运行下一个命令以确认证书已生成。Ready=True

sudo microk8s kubectl get certificate


运行下一个命令并查看最终输出以验证证书是否已颁发。

sudo microk8s kubectl describe certificate tls-secret


现在如果你访问你的域名。你应该看到成功的小锁!:-)

ni65a41a

ni65a41a2#

更新2021年12月:我必须更新ingress-routes.yaml才能让它工作:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-routes
spec:
  rules:
#change yourdomain.com to your domain
  - host: yourdomain.com
    http:
      paths:
        - path: /
          pathType: Prefix
          backend:
            service:
              name: webserver-svc
              port:
                number: 80

字符串

相关问题