广告

教程 | K8S中使用Helm部署nginx ingress+let’s encrypt

  • 浏览(3,836)
  • 评论(0)
  • 译者:k8s

let’s encrypt是一种免费SSL安全证书。

nginx ingress controller提供了一种简单的方式能够将你在kubernetes上的service暴露给外界,并通过let’s encrypt提供SSL安全证书。为了简化安装这些组件,我们使用Helm。

01

首先Helm是什么?

Helm是管理kubernetes charts的工具。charts是预配置好的kubernetes资源包。

用Helm可以:

  • 找到并且使用软件包作为kubernetes charts。

  • 以kubernetes charts的方式分享你自己的应用。

  • 为你的kubernetes应用创建可重复利用的builds。

  • 清晰的管理你的kubernetes manifest文件。

  • 管理Helm包的releases版本。

02

关于Helm的安装

如果你还没有安装Helm、macOS/homebrew 用户可以运行brew install kubernetes-helm获取到一个release。Helm使用kubectl和你的kubernetes集群通信。下一步你可以通过helm init命令安装helm的后端组件。运行helm version查看安装结果是否正常。

$ helm version 

Client: &version.Version{SemVer:”v2.2.0″, GitCommit:”fc315ab59850ddd1b9b4959c89ef008fef5cdf89″, GitTreeState:”clean”}

Server: &version.Version{SemVer:”v2.2.0″, GitCommit:”fc315ab59850ddd1b9b4959c89ef008fef5cdf89″, GitTreeState:”clean”}

03

安装nginx ingress+let’s encrypt

幸运地是,目前已经有了官方的helm repo让我们可以轻易的安装ingress controller, prometheus以及其他一些有趣的charts。

安装nginx-lego(nginx ingress controller + let’s encrypt go)仅仅只是运行一条helm命令:

$ helm intall stable/nginx-lego –name nginx-lego –set lego.configmap.email=<your-email>

NAME:   nginx-lego

LAST DEPLOYED: Thu Feb 23 11:43:56 2017

NAMESPACE: default

STATUS: DEPLOYED

RESOURCES:

==> v1/ConfigMap

NAME                   DATA  AGE

nginx-lego-nginx-lego  7     1s

==> v1/Service

NAME                                   CLUSTER-IP  EXTERNAL-IP  PORT(S)                     AGE

nginx-lego-nginx-lego-default-backend  10.0.0.150  <none>       80/TCP                      1s

nginx-lego-nginx-lego                  10.0.0.59   <pending>    80:30635/TCP,443:31385/TCP  1s

==> extensions/v1beta1/Deployment

NAME                                   DESIRED  CURRENT  UP-TO-DATE  AVAILABLE  AGE

nginx-lego-nginx-lego                  1        1        1           0          1s

nginx-lego-nginx-lego-default-backend  1        1        1           0          1s

NOTES:

This chart runs an nginx-ingress-controller  adding the ability to use ingress resources to route in your cluster.

EXAMPLE INGRESS YAML:

apiVersion: extensions/v1beta1

kind: Ingress

metadata:

  namespace: foo

  annotations:

    # Add to route through the nginx service

    kubernetes.io/ingress.class: nginx

spec:

  rules:

  – host: www.example.com

    http:

      paths:

      – backend:

          serviceName: exampleService

          servicePort: 80

        path: /

$ helm list                                                                                                                                                                                                      

NAME                    REVISION        UPDATED                         STATUS          CHART                   NAMESPACE

factual-hedgehog        1               Thu Feb 23 11:28:16 2017        DEPLOYED        nginx-lego-0.2.0        default

现在你可以添加一条kubernetes.io/tls-acme: “true”的annotations到ingress资源。以下是一个包含let’s encrypt的举例:

apiVersion: extensions/v1beta1

kind: Ingress

metadata:

  name: echoserver

  annotations:

    kubernetes.io/tls-acme: “true”

    kubernetes.io/ingress.class: “nginx”

spec:

  tls:

  – hosts:

    – example.com

    secretName: example.com-tls

  rules:

  – host: example.com 

    http:

      paths:

      – path: /

        backend:

          serviceName: webserver

          servicePort: 80

04

配置Helm chart

所有的nginx-lego chart配置选项在https://github.com/kubernetes/charts/blob/master/stable/nginx-lego/values.yaml描述。你可以写下你自己的配置文件或者通过helm命令的方式来覆写这些配置项。

own-values.yaml文件:

lego:

  configmap:

    email: <your-email>

    # Production Let’s Encrypt server

    url: “https://acme-v01.api.letsencrypt.org/directory”

之后更新nginx controller: helm upgrade nginx-lego stable/nginx-lego –values=own-values.yaml

Note


nginx-lego将会默认使用loadbalancer。你可以将nginx.service.type的值设置为ClusterIP 或者 Nodeport。

欢迎广大技术人士投稿,

K8S技术社区将对年度作者给予特别奖励!

投稿信箱:admin@k8s.cn



K8S技术社区当前有两大技术推广平台,K8S技术社区官方网站(www.k8s.cn)和K8S技术社区微信公众平台(kubernetescn),我们欢迎广大K8S技术同好们关注支持,也希望集合K8S技术极客进群交流(筒子们后台留言微信号!),有任何建议或问题都可以随时与我们取得沟通(admin@k8s.cn),感谢支持!


  • 分享到:
  • icon
  • icon
  • icon
  • icon
箭头