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

标签 kubernetes lets-encrypt nginx-ingress microk8s cert-manager

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

最佳答案

本指南是使用 Microk8s 和默认的 Ingress Controller 设置 Letsencrypt 与 Kubernetes。
使用的版本:
microk8s 1.21版/稳定版
证书管理器 v1.3.1
先决条件:将端口 80 和 443 转发到您的服务器。设置一个指向您的服务器的域名。
安装 microk8s

snap install microk8s --classic --channel=1.21/stable
启用 dns 和入口
sudo microk8s enable dns ingress
我们将使用 nginx 网络服务器镜像创建一个测试网络服务器部署/服务来测试网络流量
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
现在配置默认入口以服务于测试网络服务器
入口路由.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。这可能是 microk8s 特有的。 https://cert-manager.io/docs/tutorials/acme/ingress/
letencrypt-staging.yaml
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: letsencrypt-staging
spec:
  acme:
#change to your email
    email: youremail@gmail.com
    server: https://acme-staging-v02.api.letsencrypt.org/directory
    privateKeySecretRef:
      name: letsencrypt-staging
    solvers:
    - http01:
        ingress:
          class: public
letencrypt-prod.yaml
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: youremail@gmail.com
    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
现在更新入口路由.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
现在更改入口路由.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
现在是关键时刻。运行下一个命令以确认已生成证书。就绪=真
sudo microk8s kubectl get certificate
运行下一个命令并查看最终输出以验证证书是否已颁发。
sudo microk8s kubectl describe certificate tls-secret
现在,如果您访问您的域。你应该看到成功的小锁! :-)

关于kubernetes - 如何使用默认 Ingress 使用 Kubernetes microk8s 设置 Letsencrypt?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67430592/

相关文章:

go - 我可以使用 autocert 的动态主机策略吗?

nginx - 无法使用 Ingress SubPath 访问 GUI

kubernetes - 无法为入口后面的入口设置安全连接-错误的网关

kubernetes - nginx 入口重写目标重定向问题

Kubernetes 消息消费者可扩展性

kubernetes - K8s 上广告的 kafka 连接休息监听器

kubernetes - 如何将我们的自定义Thingsboard部署到Kubernetes Engine?

ssl - 在 Jetty 中使用 Lets-Encrypt SSL 证书

android - 在 Android < 7.1.1 上制作应用程序信任 Let's Encrypt ISRG Root X1

kubernetes 列出所有正在运行的 pod 名称