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

K8S技術社區正式上線啦!快快關注找到志同道合的小夥伴!nginx


let's encrypt是一種免費SSL安全證書。
git

nginx ingress controller提供了一種簡單的方式可以將你在kubernetes上的service暴露給外界,並經過let's encrypt提供SSL安全證書。爲了簡化安裝這些組件,咱們使用Helm。github



01web

首先Helm是什麼?後端




Helm是管理kubernetes charts的工具。charts是預配置好的kubernetes資源包。api


用Helm能夠:安全

  • 找到而且使用軟件包做爲kubernetes charts。app

  • 以kubernetes charts的方式分享你本身的應用。ide

  • 爲你的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。

相關文章
相關標籤/搜索