溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

k8s之Ingress-nginx基本原理及部署實(shí)戰(zhàn)

發(fā)布時(shí)間:2020-02-27 06:22:41 來(lái)源:網(wǎng)絡(luò) 閱讀:1950 作者:wx5b9c94b17c62a 欄目:云計(jì)算

kubernetes服務(wù)暴露介紹

到目前為止,kubernetes總共有三種暴露服務(wù)的方式:

  • LoadBlancer Service
  • NodePort Service
  • Ingress

LoadBlancer Service

LoadBlancer Service是kubernetes結(jié)合云平臺(tái)的組件,如國(guó)外的GCE,AWS,國(guó)內(nèi)阿里云等等。使用它項(xiàng)使用的底層云平臺(tái)申請(qǐng)創(chuàng)建負(fù)載均衡器來(lái)實(shí)現(xiàn),對(duì)使用云平臺(tái)的集群比較方便,但有局限,費(fèi)用高。

NodePort Service

我們之前博文中暴露服務(wù)時(shí),用的都是nodeport,實(shí)質(zhì)上就是通過(guò)在集群的每個(gè)節(jié)點(diǎn)上暴露一個(gè)端口,然后將這個(gè)端口映射到某個(gè)具體的service來(lái)實(shí)現(xiàn)的,比較直觀方便,雖然每個(gè)node的端口有很多(0~65535),但是由于安全和易用方面(服務(wù)多了就亂了,還有端口沖突問(wèn)題)且對(duì)主機(jī)安全性存在一定風(fēng)險(xiǎn)(內(nèi)網(wǎng)環(huán)境,問(wèn)題不大),所以實(shí)際使用并不多,當(dāng)然對(duì)于小規(guī)模的集群服務(wù),還是比較不錯(cuò)的。

以上兩種服務(wù)從各方面看似都不太理想,所以通過(guò)情況下,我們會(huì)通過(guò)Ingress對(duì)象來(lái)實(shí)現(xiàn)(安全,方便統(tǒng)一管理)。

Ingress概述

一,什么是Ingress?

在kubernetes集群中,我們知道service和pod的ip僅在集群內(nèi)部訪問(wèn)。如果外部應(yīng)用要訪問(wèn)集群內(nèi)的服務(wù),集群外部的請(qǐng)求需要通過(guò)負(fù)載均衡轉(zhuǎn)發(fā)到service在Node上暴露的NodePort上,然后再由kube-proxy組件將其轉(zhuǎn)發(fā)給相關(guān)的pod。

而Ingress就是為進(jìn)入集群的請(qǐng)求提供路由規(guī)則的集合,通俗點(diǎn)就是提供外部訪問(wèn)集群的入口,將外部的HTTP或者HTTPS請(qǐng)求轉(zhuǎn)發(fā)到集群內(nèi)部service上。
k8s之Ingress-nginx基本原理及部署實(shí)戰(zhàn)
k8s之Ingress-nginx基本原理及部署實(shí)戰(zhàn)
流程圖如上,其中Ingress代理的并不是pod的service,而是pod,之所以在配置的時(shí)候是配置的service,是為了通過(guò)service來(lái)獲取所有pod的信息。
.

二,Ingress-nginx組成

Ingress-nginx一般由三個(gè)組件組成:

  • 反向代理負(fù)載均衡器
  • Ingress Controller
  • Ingress
1)反向代理負(fù)載均衡器:通常以service的port方式運(yùn)行,接收并按照ingress定義的規(guī)則進(jìn)行轉(zhuǎn)發(fā),常用的有nginx,Haproxy,Traefik等,本文中使用的就是nginx。
 2)ingress-nginx-Controller: 監(jiān)聽(tīng)APIServer,根據(jù)用戶編寫(xiě)的ingress規(guī)則(編寫(xiě)ingress的yaml文件),動(dòng)態(tài)地去更改nginx服務(wù)的配置文件,并且reload重載使其生效,此過(guò)程是自動(dòng)化的(通過(guò)lua腳本來(lái)實(shí)現(xiàn))。
3)Ingress:將nginx的配置抽象成一個(gè)Ingress對(duì)象,當(dāng)用戶每添加一個(gè)新的服務(wù),只需要編寫(xiě)一個(gè)新的ingress的yaml文件即可。

三,Ingress-nginx的工作原理

1)ingress controller通過(guò)和kubernetes api交互,動(dòng)態(tài)的去感知集群中ingress規(guī)則變化。
2)然后讀取它,按照自定義的規(guī)則,規(guī)則就是寫(xiě)明了那個(gè)域名對(duì)應(yīng)哪個(gè)service,生成一段nginx配置。
3)在寫(xiě)到nginx-ingress-controller的pod里,這個(gè)Ingress controller的pod里運(yùn)行著一個(gè)Nginx服務(wù),控制器會(huì)把生成的nginx配置寫(xiě)入/etc/nginx.conf文件中。
4)然后reload一下使配置生效,以此達(dá)到分配和動(dòng)態(tài)更新問(wèn)題。

四,ingress-nginx解決了生產(chǎn)環(huán)境中哪些問(wèn)題?

1)動(dòng)態(tài)配置服務(wù):
如果按照傳統(tǒng)方式,當(dāng)新增加一個(gè)服務(wù)時(shí),我們可能需要在流量入口加一個(gè)反向代理指向我們新的服務(wù),而使用ingress,只需要配置好ingress,當(dāng)服務(wù)啟動(dòng)時(shí),會(huì)自動(dòng)注冊(cè)到ingress當(dāng)中,不需要額外的操作。

2)減少不必要的Port暴露(安全,端口容易管理)
我們知道部署k8s時(shí),是需要關(guān)閉防火墻的,主要原因是k8s的很多服務(wù)會(huì)以nodeport方式映射出去,這樣對(duì)于宿主機(jī)來(lái)說(shuō)是非常的不安全的,而ingress可以避免這個(gè)問(wèn)題,只需要將ingress自身服務(wù)映射出去,就可代理后端所有的服務(wù),則后端服務(wù)不需要映射出去。

部署Ingress-nginx

本文通過(guò)以下配置示例來(lái)實(shí)踐ingress-nginx:

在本文部署ingress-nginx中所有用到的docker鏡像包,大家可以從我GitHub中進(jìn)行下載,鏡像包下載鏈接:https://github.com/sqm-sys/Ingress-nginx/releases/tag/v1

一,部署ingress-nginx前準(zhǔn)備:

1,搭建私有倉(cāng)庫(kù)(registry),并push測(cè)試鏡像(apache,tomcat)到倉(cāng)庫(kù)中

#運(yùn)行registry私有倉(cāng)庫(kù):
[root@master ~]# docker run  -d --name registry --restart=always -p 5000:5000 -v /data/registry:/var/lib/registry registry
#修改docker配置文件:
[root@master ~]# vim /usr/lib/systemd/system/docker.service 
ExecStart=/usr/bin/dockerd -H unix:// --insecure-registry 172.16.1.30:5000
#拷貝修改后的docker配置文件到集群其他節(jié)點(diǎn)中:
[root@master ~]# scp /usr/lib/systemd/system/docker.service  node01:/usr/lib/systemd/system/ 
[root@master ~]# scp /usr/lib/systemd/system/docker.service  node02:/usr/lib/systemd/system/
#集群中所有主機(jī)重新加載進(jìn)程,并重啟docker服務(wù):
[root@master ~]# systemctl daemon-reload
[root@master ~]# systemctl restart docker
#push測(cè)試鏡像至私有倉(cāng)庫(kù):
[root@master ~]# docker push 172.16.1.30:5000/apache:v1 
[root@master ~]# docker push 172.16.1.30:5000/tomcat:v1 

2,創(chuàng)建namespace
#創(chuàng)建yaml文件:

apiVersion: v1
kind: Namespace
metadata:
  name: ingress-test
#創(chuàng)建并查看namespace:
[root@master ~]# kubectl create -f ns.yaml 
namespace/ingress-nginx created
[root@master ~]# kubectl  get ns
NAME              STATUS   AGE
default           Active   92d
ingress-test     Active   4s

3,創(chuàng)建deployment及service資源進(jìn)行測(cè)試
1)創(chuàng)建httpd及service資源:

[root@master ~]# mkdir ingress-nginx
[root@master ~]# cd ingress-nginx/
[root@master ingress-nginx]# vim httpd.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: httpd
  namespace: ingress-test
spec:
  replicas: 3
  template:
    metadata:
      labels:
        name: httpd
    spec:
      containers:
      - name: httpd
        image: 172.16.1.30:5000/apache:v1  #鏡像從私有倉(cāng)庫(kù)中進(jìn)行拉取
---
apiVersion: v1
kind: Service
metadata:
  name: httpd-svc
  namespace: ingress-test
spec:
  type: NodePort
  selector:
    name: httpd
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
    nodePort: 32134

2)創(chuàng)建tomcat及service資源:

[root@master ingress-nginx]# vim tomcat.yaml 
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: tomcat
  namespace: ingress-test
spec:
  replicas: 3
  template:
    metadata:
      labels:
        name: tomcat
    spec:
      containers:
      - name: tomcat
        image: 172.16.1.30:5000/tomcat:v1
---
apiVersion: v1
kind: Service
metadata:
  name: tomcat-svc
  namespace: ingress-test
spec:
  type: NodePort
  selector:
    name: tomcat
  ports:
  - protocol: TCP
    port: 8080
    targetPort: 8080
    nodePort: 32135

#創(chuàng)建以上兩個(gè)應(yīng)用,并查看是否創(chuàng)建成功:

[root@master ingress-nginx]# kubectl create -f  httpd.yaml 
deployment.extensions/httpd created
service/httpd-svc create
[root@master ingress-nginx]# kubectl create -f tomcat.yaml 
deployment.extensions/tomcat created
service/tomcat-svc created

k8s之Ingress-nginx基本原理及部署實(shí)戰(zhàn)
k8s之Ingress-nginx基本原理及部署實(shí)戰(zhàn)
3)測(cè)試外部通過(guò)nodeport方式能否訪問(wèn)到集群內(nèi)部應(yīng)用:
k8s之Ingress-nginx基本原理及部署實(shí)戰(zhàn)
k8s之Ingress-nginx基本原理及部署實(shí)戰(zhàn)

可以看到通過(guò)nodeport暴露的方式是沒(méi)有問(wèn)題的,但是到該種方式在大規(guī)模的集群服務(wù)中,有很大的缺陷,所以接下來(lái)通過(guò)ingress-nginx進(jìn)行實(shí)現(xiàn)。

二,創(chuàng)建ingress-nginx

1)GitHub上下載yaml文件的網(wǎng)頁(yè)鏈接:https://github.com/kubernetes/ingress-nginx/blob/master/docs/deploy/index.md

進(jìn)入后顯示以下頁(yè)面:

k8s之Ingress-nginx基本原理及部署實(shí)戰(zhàn)
#注意:網(wǎng)頁(yè)上完整的命令是直接執(zhí)行該yaml文件,我們先不要執(zhí)行,先將該yaml文件下載到本地主機(jī)上。(復(fù)制命令即可)

[root@master ingress-nginx]# wget  https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.28.0/deploy/static/mandatory.yaml
[root@master ingress-nginx]# ls
httpd.yaml  mandatory.yaml  tomcat.yaml

2)修改yaml文件:
[root@master ingress-nginx]# vim mandatory.yaml
#添加以下字段:
k8s之Ingress-nginx基本原理及部署實(shí)戰(zhàn)

hostNetwork: true
如果使用此網(wǎng)絡(luò)參數(shù),那么pod中運(yùn)行的應(yīng)用程序可以直接使用node節(jié)點(diǎn)端口,這樣node節(jié)點(diǎn)主機(jī)所在的網(wǎng)絡(luò)的其他主機(jī),都可以通過(guò)訪問(wèn)到此應(yīng)用程序。
nodeSelector:
設(shè)置節(jié)點(diǎn)標(biāo)簽選擇器,指定在哪臺(tái)節(jié)點(diǎn)上運(yùn)行。(保持默認(rèn)即可,讓它自己選擇,當(dāng)然大家也可以自定義標(biāo)簽并選擇運(yùn)行對(duì)應(yīng)的node)
.
上面鏡像包的版本可能會(huì)經(jīng)常的更新,我用的是當(dāng)前最新版本0.28.0,大家可以根據(jù)自己想用的版本進(jìn)行下載。

注意:因?yàn)槟J(rèn)yaml文件中指定下載地址是國(guó)外的鏡像,由于國(guó)內(nèi)網(wǎng)絡(luò)環(huán)境限制,我們不能直接從google的鏡像站下載鏡像,所以大家可以通過(guò)以下方式進(jìn)行下載:
[root@master ingress-nginx]# docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller:0.28.0

3)導(dǎo)入鏡像包-將nginx-ingress-controller.0.28.0鏡像包導(dǎo)入集群中的各個(gè)節(jié)點(diǎn):

[root@node01 ~]# docker load < nginx-ingress-controller.0.28.0.tar 
[root@node01 ~]# docker images | grep nginx-ingress
registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller   0.28.0              61de39f77f45        7 days ago          305MB

//在master上執(zhí)行該yaml文件:
k8s之Ingress-nginx基本原理及部署實(shí)戰(zhàn)

//查看ingress-nginx pod是否運(yùn)行:
[root@master ingress-nginx]# kubectl get pod -n ingress-nginx  -o wide
NAME                                        READY   STATUS    RESTARTS   AGE   IP            NODE     NOMINATED NODE   READINESS GATES
nginx-ingress-controller-685985b5b8-8mzjc   1/1     Running   0          43s   172.16.1.32   node02   <none>           <none>

4)創(chuàng)建ingress規(guī)則(YAML文件)
yaml文件內(nèi)容如下:

[root@master ingress-nginx]# vim ingress-rule.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: test-ingress
  namespace: ingress-test
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: ingress.test.com   #后端應(yīng)用通過(guò)該域名進(jìn)行訪問(wèn)
    http:
      paths:
      - path: /   #apache的網(wǎng)頁(yè)根目錄:/
        backend:
          serviceName: httpd-svc
          servicePort: 80
      - path: /tomcat   #tomcat的網(wǎng)頁(yè)更目錄:/tomcat
        backend:
          serviceName: tomcat-svc
          servicePort: 8080

創(chuàng)建該規(guī)則就是用于分別代理后端的apache和tomcat服務(wù)。

//創(chuàng)建ingress,并查看綁定信息:
[root@master ingress-nginx]# kubectl create -f ingress-rule.yaml 
ingress.extensions/test-ingress created
[root@master ingress-nginx]# kubectl get ingresses. -n ingress-test 
NAME           HOSTS              ADDRESS   PORTS   AGE
test-ingress   ingress.test.com             80      17s

#查看describe查看詳細(xì)信息(確保成功綁定后端得到apache和tomcat服務(wù))
k8s之Ingress-nginx基本原理及部署實(shí)戰(zhàn)

##進(jìn)入ingress容器查看nginx的配置文件:

[root@master ingress-nginx]# kubectl exec  -it -n ingress-nginx nginx-ingress-controller-685985b5b8-8mzjc  /bin/sh
/etc/nginx $ cat nginx.conf

k8s之Ingress-nginx基本原理及部署實(shí)戰(zhàn)
k8s之Ingress-nginx基本原理及部署實(shí)戰(zhàn)

通過(guò)查看nginx配置文件,我們可以了解到ingress-controller會(huì)根據(jù)我們編寫(xiě)的ingress規(guī)則(規(guī)則就是代理后端應(yīng)用且會(huì)生成一段nginx配置),將nginx配置動(dòng)態(tài)寫(xiě)入到nginx的配置文件中,并使其reload生效。

5)通過(guò)域名訪問(wèn)集群內(nèi)的服務(wù)

##當(dāng)前我們需要知道ingress運(yùn)行在那個(gè)node上:
[root@master ingress-nginx]# kubectl get pod -o wide -n ingress-nginx 
NAME                                        READY   STATUS    RESTARTS   AGE   IP            NODE     NOMINATED NODE   READINESS GATES
nginx-ingress-controller-685985b5b8-8mzjc   1/1     Running   0          31m   172.16.1.32   node02   <none>           <none>

我們沒(méi)有搭建DNS服務(wù)器,所以需要在windows主機(jī)上將node02的ip地址添加到hosts文件中,做域名解析:

修改路徑:C:\Windows\System32\drivers\etc\hosts(需要給予修改權(quán)限)
172.16.1.32 ingress.test.com  #添加該條內(nèi)容

##訪問(wèn)httpd:
k8s之Ingress-nginx基本原理及部署實(shí)戰(zhàn)
##訪問(wèn)tomcat:
k8s之Ingress-nginx基本原理及部署實(shí)戰(zhàn)

6)創(chuàng)建ingress的service資源對(duì)象:
雖然上面通過(guò)ingress已經(jīng)能夠代理后端的應(yīng)用了,但是我們可以發(fā)現(xiàn)只能通過(guò)指定運(yùn)行節(jié)點(diǎn)的地址來(lái)做域名解析(訪問(wèn)網(wǎng)頁(yè)),不能通過(guò)集群中的其他節(jié)點(diǎn)來(lái)訪問(wèn),如果該節(jié)點(diǎn)掛掉了,則會(huì)導(dǎo)致ingress無(wú)法代理后端的應(yīng)用,所以我們需要為ingress創(chuàng)建service資源。
。
GitHub上為我們提供了YAML文件:
k8s之Ingress-nginx基本原理及部署實(shí)戰(zhàn)
##我們將其下載到本地:

[root@master ingress-nginx]# wget  https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.28.0/deploy/static/provider/baremetal/service-nodeport.yaml
[root@master ingress-nginx]# cat service-nodeport.yaml   #不需要我們做修改,這里只是查看下內(nèi)容
apiVersion: v1
kind: Service
metadata:
  name: ingress-nginx
  namespace: ingress-nginx
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
spec:
  type: NodePort
  ports:
    - name: http
      port: 80
      targetPort: 80
      protocol: TCP
    - name: https
      port: 443
      targetPort: 443
      protocol: TCP
  selector:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx

---

//我們創(chuàng)建該service資源對(duì)象:

[root@master ingress-nginx]# kubectl create -f service-nodeport.yaml 
service/ingress-nginx created
[root@master ingress-nginx]# kubectl get svc -n ingress-nginx 
NAME            TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
ingress-nginx   NodePort   10.101.206.247   <none>        80:30842/TCP,443:32550/TCP   20s

#可以看到nodeport為我們映射出http和https的隨機(jī)端口30842/32550。我們通過(guò)此端口,就可指定集群中任意一臺(tái)節(jié)點(diǎn)的地址都可以代理后端的應(yīng)用,即使集群中某一節(jié)點(diǎn)宕機(jī)也不會(huì)影響外部通過(guò)域名訪問(wèn)。

##訪問(wèn)apache:
k8s之Ingress-nginx基本原理及部署實(shí)戰(zhàn)
##訪問(wèn)tomcat
k8s之Ingress-nginx基本原理及部署實(shí)戰(zhàn)
。
此時(shí)在windows主機(jī)中的host文件中,隨便綁定集群中的任意節(jié)點(diǎn)的ip地址,都是可以進(jìn)行解析網(wǎng)頁(yè)的(大家可自己測(cè)試),從而解決了我們之前所擔(dān)心的問(wèn)題,相比于之前nodeport方式,證明ingress可以解決不必要的port暴露,只需要映射ingress的端口,就可以代理后端所有的應(yīng)用,從而滿足了我們的需求。

.

三,基于虛擬主機(jī)的ingress

搭建虛擬主機(jī)的目的:實(shí)現(xiàn)以不同的域名訪問(wèn)同一個(gè)web界面
本文就僅基于上面的httpd服務(wù),我們?yōu)樵摲?wù)綁定兩個(gè)不同的域名來(lái)訪問(wèn):
##修改ingress規(guī)則文件(完整的yaml配置如下)

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: test-ingress
  namespace: ingress-test
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: ingress.test.com
    http:
      paths:
      - path: /
        backend:
          serviceName: httpd-svc
          servicePort: 80
      - path: /tomcat
        backend:
          serviceName: tomcat-svc
          servicePort: 8080
  - host: ingress.test2.com   #只需要在rules字段下添加另一個(gè)host字段即可,這里只實(shí)現(xiàn)httpd的,如果有需求可以添加上tomcat的。
    http:
      paths:
      - path: /
        backend:
          serviceName: httpd-svc   #注意,serviceName所有虛擬主機(jī)必須保持一致
          servicePort: 80

//創(chuàng)建新的虛擬主機(jī)并查看:

[root@master ingress-nginx]# kubectl apply -f  ingress-rule.yaml 
ingress.extensions/test-ingress configured
[root@master ingress-nginx]# kubectl get ingresses. -n ingress-test 
NAME           HOSTS                                ADDRESS          PORTS   AGE
test-ingress   ingress.test.com,ingress.test2.com   10.101.206.247   80      83m

//通過(guò)不同的域名進(jìn)行訪問(wèn)httpd網(wǎng)頁(yè):

因?yàn)槲覀儧](méi)有搭建dns服務(wù)器,所以需要在windows hosts文件將新的域名進(jìn)行綁定(地址可以綁定集群中任意一臺(tái)node):
172.16.1.31 ingress.test.com
172.16.1.32 ingress.test2.com

k8s之Ingress-nginx基本原理及部署實(shí)戰(zhàn)
k8s之Ingress-nginx基本原理及部署實(shí)戰(zhàn)
至此,實(shí)現(xiàn)了多個(gè)不同域名能夠同時(shí)訪問(wèn)后端的應(yīng)用。
.

四,基于HTTPS的Ingress(443端口)

通過(guò)部署ingress后,我們不必按照常規(guī)的,為后端所有的pod都頒發(fā)一個(gè)證書(shū),只需為ingress代理的域名頒發(fā)證書(shū)就能夠?qū)崿F(xiàn)。

1)創(chuàng)建CA證書(shū):

[root@master HTTPS]# openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=nginxsvc/O=nginxsvc"  #參數(shù)可根據(jù)需求自定義
Generating a 2048 bit RSA private key
..............................+++
..+++
writing new private key to 'tls.key'
-----

#創(chuàng)建完成后,會(huì)在當(dāng)前目錄下生成密鑰和證書(shū)文件:

[root@master HTTPS]# ls
tls.crt  tls.key

2)創(chuàng)建deployment,service,ingress資源:(以nginx服務(wù)來(lái)實(shí)踐)
[root@master HTTPS]# vim nginx-ingress2.yaml
#完整的yaml文件內(nèi)容如下:

apiVersion: extensions/v1beta1    #創(chuàng)建deployment
kind: Deployment
metadata:
  name: web
  namespace: ingress-test
spec:
  template:
    metadata:
      labels:
        name: test-web
    spec:
      containers:
      - name: web
        image: 172.16.1.30:5000/nginx:v1  #私有倉(cāng)庫(kù)中的鏡像(已提供)
---
apiVersion: v1    #創(chuàng)建service,關(guān)聯(lián)上述deployment
kind: Service
metadata:
  name: web-svc
  namespace: ingress-test
spec:
  selector:
    name: test-web
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
---
apiVersion: extensions/v1beta1  #創(chuàng)建ingress規(guī)則
kind: Ingress
metadata:
  name: test-ingress2
  namespace: ingress-test
spec:
  tls:          #為域名頒發(fā)證書(shū)
    - hosts:
      - ingress.nginx.com
      secretName: tls-secret
  rules:
    - host: ingress.nginx.com
      http:   #注意,此處字段為http,不支持https
        paths:
        - path: /
          backend:
            serviceName: web-svc
            servicePort: 80
##創(chuàng)建基于https的ingress服務(wù)(nginx):
[root@master HTTPS]# kubectl create -f  nginx-ingress2.yaml 
deployment.extensions/web created
service/web-svc created
ingress.extensions/test-ingress2 created

##查看ingress資源和映射的service端口:

[root@master HTTPS]# kubectl get pod -n ingress-test | grep web
web-74cf864c58-rnvpx      1/1     Running   0          24s

[root@master HTTPS]# kubectl get ingresses. -n ingress-test 
NAME            HOSTS                                ADDRESS          PORTS     AGE
test-ingress    ingress.test.com,ingress.test2.com   10.101.206.247   80        127m
test-ingress2   ingress.nginx.com                    10.101.206.247   80, 443   5m32s
#可以看到新創(chuàng)建的ingress提供了80和443端口
//查看ingress的service映射的端口
[root@master HTTPS]# kubectl get svc -n ingress-nginx 
NAME            TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
ingress-nginx   NodePort   10.101.206.247   <none>        80:30842/TCP,443:32550/TCP   86m

3)通過(guò)ingress代理的443端口訪問(wèn)nginx服務(wù):

#在hosts文件中綁定域名:
172.16.1.32 ingress.nginx.com

#訪問(wèn)網(wǎng)址:https://ingress.nginx.com:32550/
k8s之Ingress-nginx基本原理及部署實(shí)戰(zhàn)
基于HTTPS的ingress服務(wù)成功實(shí)現(xiàn),至此,ingress-nginx部署完成。。。。。。。

向AI問(wèn)一下細(xì)節(jié)
AI