【问题标题】:How to setup Letsencrypt with Kubernetes microk8s using default Ingress?如何使用默认 Ingress 使用 Kubernetes microk8s 设置 Letsencrypt?
【发布时间】:2021-07-29 12:07:07
【问题描述】:

最近,我尝试在裸机服务器上使用 microk8s 和默认入口控制器设置letsencrypt。

我在网上找到了一些非常有用的指南,但似乎最近对 microk8s 的更新改变了入口控制器的配置方式。

为了节省你们的时间,我把我做了什么写了出来。

如果您遇到困难或更好地理解,这里有一些有用的资源。

https://cert-manager.io/docs/installation/kubernetes/

https://cert-manager.io/docs/tutorials/acme/ingress/

此链接对故障排除非常有用

https://cert-manager.io/docs/faq/acme/

【问题讨论】:

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


    【解决方案1】:

    本指南是使用 Microk8s 和默认 Ingress 控制器在 Kubernetes 中设置 Letsencrypt。

    使用的版本:

    microk8s 版本 1.21/stable

    证书管理器 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
    

    现在配置默认入口以服务于测试网络服务器

    ingress-routes.yaml

    apiVersion: networking.k8s.io/v1beta1
    kind: Ingress
    metadata:
      name: ingress-routes
    spec:
      rules:
    #change yourdomain.com to your domain
      - host: yourdomain.com
        http:
          paths:
            - path: /
              backend:
                serviceName: webserver-svc
                servicePort: 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/

    letsencrypt-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
    

    letsencrypt-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
    

    现在更新 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: /
              backend:
                serviceName: webserver-svc
                servicePort: 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/v1beta1
    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: /
              backend:
                serviceName: webserver-svc
                servicePort: 80
    

    应用更新

    sudo microk8s kubectl apply -f ingress-routes.yaml
    

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

    sudo microk8s kubectl get certificate
    

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

    sudo microk8s kubectl describe certificate tls-secret
    

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

    【讨论】:

    • 没有snap会好很多
    • 谢谢,这正是我想要的。
    • Ingress 类 public 确实特定于 microk8s
    • 2021 年 12 月更新:我必须更新 ingress-routes.yaml 才能使其正常工作。请参阅下面的修改后的 yaml。
    【解决方案2】:

    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
    

    【讨论】:

      猜你喜欢
      • 2019-07-27
      • 2018-07-18
      • 1970-01-01
      • 2019-08-28
      • 2021-04-23
      • 2020-11-09
      • 2016-05-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多