K8S 實戰(zhàn)(十二)| 為 Ingress 以及后端 Nginx 增加證書

前言

前面 nginx 都是 http 協(xié)議在工作缚忧,那么加證書應(yīng)該如何操作。

更新歷史

創(chuàng)建證書

可以網(wǎng)上申請一年免費證書杀捻,也可以自建證書。下面自建證書。

下載自建證書腳本

wget -O Makefile https://raw.githubusercontent.com/kubernetes/examples/master/staging/https-nginx/Makefile

創(chuàng)建證書文件

make keys KEY=/tmp/nginx.key CERT=/tmp/nginx.crt

將證書寫入到 K8S 的 secret 中

# kubectl create secret tls nginxsecret --key /tmp/nginx.key --cert /tmp/nginx.crt
secret/nginxsecret created

將 nginx 配置寫入到 K8S 的 configmap 中

# cat default.conf

server {
        listen 80 default_server;
        listen [::]:80 default_server ipv6only=on;

        listen 443 ssl;

        root /usr/share/nginx/html;
        index index.html;

        server_name localhost;
        ssl_certificate /etc/nginx/ssl/tls.crt;
        ssl_certificate_key /etc/nginx/ssl/tls.key;

        location / {
                try_files $uri $uri/ =404;
        }
}
# kubectl create configmap nginxconfigmap --from-file=default.conf
configmap/nginxconfigmap created

整合后端 Pod 和證書,使用 Service 發(fā)布

[root@master01 ~]# cat nginx-app.yaml 
apiVersion: v1
kind: Service
metadata:
  name: my-nginx
  labels:
    run: my-nginx
spec:
  type: NodePort
  ports:
  - port: 8080
    targetPort: 80
    protocol: TCP
    name: http
  - port: 443
    protocol: TCP
    name: https
  selector:
    run: my-nginx
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-nginx
spec:
  selector:
    matchLabels:
      run: my-nginx
  replicas: 1
  template:
    metadata:
      labels:
        run: my-nginx
    spec:
      volumes:
      - name: secret-volume
        secret:
          secretName: nginxsecret
      - name: configmap-volume
        configMap:
          name: nginxconfigmap
      containers:
      - name: nginxhttps
        image: bprashanth/nginxhttps:1.0
        ports:
        - containerPort: 443
        - containerPort: 80
        volumeMounts:
        - mountPath: /etc/nginx/ssl
          name: secret-volume
        - mountPath: /etc/nginx/conf.d
          name: configmap-volume
[root@master01 ~]# kubectl apply -f nginx-app.yaml       
service/my-nginx created
deployment.apps/my-nginx created

查看運行情況

[root@master01 ~]# kubectl get service -o wide
NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                        AGE     SELECTOR
my-nginx     NodePort    192.20.27.173   <none>        8080:32529/TCP,443:32699/TCP   22s     run=my-nginx

[root@master01 ~]# kubectl get pod -o wide       
NAME                          READY   STATUS    RESTARTS   AGE     IP               NODE     NOMINATED NODE   READINESS GATES
my-nginx-85fccfd5dc-2pzvw     1/1     Running   0          64s     192.10.205.224   work01   <none>           <none>

嘗試訪問

[root@master01 ~]# curl -k https://192.20.27.173  

<title>Welcome to nginx!</title>

Service 使用 NodePort 進行了端口暴露倘零,所以可以在瀏覽器中訪問 https://任意節(jié)點IP:32699 ,也可以看到證書已經(jīng)生效戳寸。

由于是自建證書呈驶,需要手動忽略報錯。

整合 ingress 和證書

# cat ingress.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: secret-tls-ingress
  annotations:
    ingress.kubernetes.io/ssl-redirect: "False"
spec:
  tls:
  - hosts:
    - test.com
    secretName: nginxsecret
  rules:
  - host: test.com
    http:
      paths:
      - backend:
          serviceName: my-nginx
          servicePort: 80
        path: /
# kubectl apply -f ingress.yaml  
ingress.extensions/secret-tls-ingress created

在前面章節(jié)中已經(jīng)將 ingress-controller 綁定在了 work01/02 上疫鹊,所以在集群外綁定 test.com 到 work01 IP 進行測試袖瞻。

# curl -k https://test.com
<title>Welcome to nginx!</title>

可以成功訪問。

結(jié)束語

證書這塊主要是把證書文件存入 K8S 的 secret 對象中拆吆,然后進行掛載映射聋迎。

這樣可以實現(xiàn)證書文件和 ingress 的解耦。

可以只在 ingress 中設(shè)置證書枣耀,后端 nginx 不配置證書砌庄。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市奕枢,隨后出現(xiàn)的幾起案子娄昆,更是在濱河造成了極大的恐慌,老刑警劉巖缝彬,帶你破解...
    沈念sama閱讀 212,816評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件萌焰,死亡現(xiàn)場離奇詭異,居然都是意外死亡谷浅,警方通過查閱死者的電腦和手機扒俯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來一疯,“玉大人撼玄,你說我怎么就攤上這事《昭” “怎么了掌猛?”我有些...
    開封第一講書人閱讀 158,300評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長眉睹。 經(jīng)常有香客問我荔茬,道長废膘,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,780評論 1 285
  • 正文 為了忘掉前任慕蔚,我火速辦了婚禮丐黄,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘孔飒。我一直安慰自己灌闺,他們只是感情好,可當我...
    茶點故事閱讀 65,890評論 6 385
  • 文/花漫 我一把揭開白布坏瞄。 她就那樣靜靜地躺著桂对,像睡著了一般。 火紅的嫁衣襯著肌膚如雪惦积。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,084評論 1 291
  • 那天猛频,我揣著相機與錄音狮崩,去河邊找鬼。 笑死鹿寻,一個胖子當著我的面吹牛睦柴,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播毡熏,決...
    沈念sama閱讀 39,151評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼坦敌,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了痢法?” 一聲冷哼從身側(cè)響起狱窘,我...
    開封第一講書人閱讀 37,912評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎财搁,沒想到半個月后蘸炸,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,355評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡尖奔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,666評論 2 327
  • 正文 我和宋清朗相戀三年搭儒,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片提茁。...
    茶點故事閱讀 38,809評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡淹禾,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出茴扁,到底是詐尸還是另有隱情铃岔,我是刑警寧澤,帶...
    沈念sama閱讀 34,504評論 4 334
  • 正文 年R本政府宣布峭火,位于F島的核電站德撬,受9級特大地震影響铲咨,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蜓洪,卻給世界環(huán)境...
    茶點故事閱讀 40,150評論 3 317
  • 文/蒙蒙 一纤勒、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧隆檀,春花似錦摇天、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至裳仆,卻和暖如春腕让,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背歧斟。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評論 1 267
  • 我被黑心中介騙來泰國打工纯丸, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人静袖。 一個月前我還...
    沈念sama閱讀 46,628評論 2 362
  • 正文 我出身青樓觉鼻,卻偏偏與公主長得像,于是被迫代替她去往敵國和親队橙。 傳聞我的和親對象是個殘疾皇子坠陈,可洞房花燭夜當晚...
    茶點故事閱讀 43,724評論 2 351