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

qlckcl4x  于 2024-01-06  发布在  Kubernetes
关注(0)|答案(2)|浏览(181)

最近,我尝试在一台裸机服务器上使用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

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

字符串
启用DNS和入口

  1. sudo microk8s enable dns ingress


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

  • webserver-depl-svc.yaml*
  1. apiVersion: apps/v1
  2. kind: Deployment
  3. metadata:
  4. name: webserver-depl
  5. spec:
  6. selector:
  7. matchLabels:
  8. app: webserver-app
  9. template:
  10. metadata:
  11. labels:
  12. app: webserver-app
  13. spec:
  14. containers:
  15. - name: webserver-app
  16. image: nginx:1.8
  17. ---
  18. apiVersion: v1
  19. kind: Service
  20. metadata:
  21. name: webserver-svc
  22. spec:
  23. selector:
  24. app: webserver-app
  25. ports:
  26. - name: webserver-app
  27. protocol: TCP
  28. port: 80
  29. targetPort: 80


应用配置文件

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


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

  • ingress-routes.yaml*
  1. apiVersion: networking.k8s.io/v1
  2. kind: Ingress
  3. metadata:
  4. name: ingress-routes
  5. spec:
  6. rules:
  7. #change yourdomain.com to your domain
  8. - host: yourdomain.com
  9. http:
  10. paths:
  11. - path: /
  12. pathType: Prefix
  13. backend:
  14. service:
  15. name: webserver-svc
  16. port:
  17. number: 80


应用入口路由

  1. sudo microk8s kubectl apply -f ingress-routes.yaml


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

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


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

  1. sudo microk8s kubectl get pods -n=cert-manager


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


  1. apiVersion: cert-manager.io/v1
  2. kind: ClusterIssuer
  3. metadata:
  4. name: letsencrypt-staging
  5. spec:
  6. acme:
  7. #change to your email
  8. email: [email protected]
  9. server: https://acme-staging-v02.api.letsencrypt.org/directory
  10. privateKeySecretRef:
  11. name: letsencrypt-staging
  12. solvers:
  13. - http01:
  14. ingress:
  15. class: public

  • 莱斯蒙特-普罗德-亚姆 *
  1. apiVersion: cert-manager.io/v1
  2. kind: ClusterIssuer
  3. metadata:
  4. name: letsencrypt-prod
  5. spec:
  6. acme:
  7. server: https://acme-v02.api.letsencrypt.org/directory
  8. #change to your email
  9. email: [email protected]
  10. privateKeySecretRef:
  11. name: letsencrypt-prod
  12. solvers:
  13. - http01:
  14. ingress:
  15. class: public


应用两个发行者的身份证

  1. sudo microk8s kubectl apply -f letsencrypt-staging.yaml
  2. sudo microk8s kubectl apply -f letsencrypt-prod.yaml


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

  1. apiVersion: networking.k8s.io/v1beta1
  2. kind: Ingress
  3. metadata:
  4. name: ingress-routes
  5. annotations:
  6. cert-manager.io/cluster-issuer: "letsencrypt-staging"
  7. spec:
  8. tls:
  9. - hosts:
  10. #change to your domain
  11. - yourdomain.com
  12. secretName: tls-secret
  13. rules:
  14. #change to your domain
  15. - host: yourdomain.com
  16. http:
  17. paths:
  18. - path: /
  19. pathType: Prefix
  20. backend:
  21. service:
  22. name: webserver-svc
  23. port:
  24. number: 80


应用此更新

  1. sudo microk8s kubectl apply -f ingress-routes.yaml


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

  1. sudo microk8s kubectl get certificate


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

  1. sudo microk8s kubectl describe certificate tls-secret


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

  1. apiVersion: networking.k8s.io/v1
  2. kind: Ingress
  3. metadata:
  4. name: ingress-routes
  5. annotations:
  6. cert-manager.io/cluster-issuer: "letsencrypt-prod"
  7. spec:
  8. tls:
  9. - hosts:
  10. #change to your domain
  11. - yourdomain.com
  12. secretName: tls-secret
  13. rules:
  14. #change to your domain
  15. - host: yourdomain.com
  16. http:
  17. paths:
  18. - path: /
  19. pathType: Prefix
  20. backend:
  21. service:
  22. name: webserver-svc
  23. port:
  24. number: 80


应用此更新

  1. sudo microk8s kubectl apply -f ingress-routes.yaml


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

  1. sudo microk8s kubectl get certificate


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

  1. sudo microk8s kubectl describe certificate tls-secret


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

展开查看全部
ni65a41a

ni65a41a2#

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

  1. apiVersion: networking.k8s.io/v1
  2. kind: Ingress
  3. metadata:
  4. name: ingress-routes
  5. spec:
  6. rules:
  7. #change yourdomain.com to your domain
  8. - host: yourdomain.com
  9. http:
  10. paths:
  11. - path: /
  12. pathType: Prefix
  13. backend:
  14. service:
  15. name: webserver-svc
  16. port:
  17. number: 80

字符串

展开查看全部

相关问题