K8S技術社區正式上線啦!快快關注找到志同道合的小夥伴!nginx
let's encrypt是一種免費SSL安全證書。
gitnginx 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。