溫馨提示×

溫馨提示×

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

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

K8s之Ingress-nginx原理及配置

發(fā)布時(shí)間:2020-07-19 01:39:35 來源:網(wǎng)絡(luò) 閱讀:3569 作者:warrent 欄目:云計(jì)算

前言

在Kubernetes中,服務(wù)和Pod的IP地址僅可以在集群網(wǎng)絡(luò)內(nèi)部使用,對于集群外的應(yīng)用是不可見的。為了使外部的應(yīng)用能夠訪問集群內(nèi)的服務(wù),在Kubernetes中目前提供了以下幾種方案:

  • NodePort
  • LoadBalancer
  • Ingress

在之前的博文中介紹過NodePort,簡單來說,就是通過service這種資源對象,為后端pod提供一個統(tǒng)一的訪問接口,然后將service的統(tǒng)一訪問接口映射到群集節(jié)點(diǎn)上,最終實(shí)現(xiàn)client通過映射到群集節(jié)點(diǎn)上的端口訪問到后端pod提供的服務(wù)。

但是,這種方式有一個弊端,就是當(dāng)新生成一個pod服務(wù)就需要創(chuàng)建對應(yīng)的service將其映射到節(jié)點(diǎn)端口,當(dāng)運(yùn)行的pod過多時(shí),我們節(jié)點(diǎn)暴露給client端的端口也會隨之增加,這樣我們整個k8s群集的危險(xiǎn)系數(shù)就會增加,因?yàn)槲覀冊诖罱ㄈ杭帲俜矫鞔_指出,必須關(guān)閉firewalld防火墻及清空iptables規(guī)則,現(xiàn)在我們又暴露了那么多端口給client,安全系數(shù)可想而知。

有沒有更安全又簡便的一種方法呢?答案是肯定的,就是來利用Ingress這種資源對象來實(shí)現(xiàn)。

博文大綱:
一、Ingress-nginx介紹
二、Ingress-nginx配置示例
三、配置HTTPS

一、Ingress-nginx介紹

1、Ingress-nginx組成

  • ingress-nginx-controller:根據(jù)用戶編寫的ingress規(guī)則(創(chuàng)建的ingress的yaml文件),動態(tài)的去更改nginx服務(wù)的配置文件,并且reload重載使其生效(是自動化的,通過lua腳本來實(shí)現(xiàn));
  • ingress資源對象:將Nginx的配置抽象成一個Ingress對象,每添加一個新的Service資源對象只需寫一個新的Ingress規(guī)則的yaml文件即可(或修改已存在的ingress規(guī)則的yaml文件)

1、Ingress-nginx可以解決什么問題?

1)動態(tài)配置服務(wù)
  如果按照傳統(tǒng)方式, 當(dāng)新增加一個服務(wù)時(shí), 我們可能需要在流量入口加一個反向代理指向我們新的k8s服務(wù). 而如果用了Ingress-nginx, 只需要配置好這個服務(wù), 當(dāng)服務(wù)啟動時(shí), 會自動注冊到Ingress的中, 不需要而外的操作。
2)減少不必要的端口映射
  配置過k8s的都清楚, 第一步是要關(guān)閉防火墻的, 主要原因是k8s的很多服務(wù)會以NodePort方式映射出去, 這樣就相當(dāng)于給宿主機(jī)打了很多孔, 既不安全也不優(yōu)雅. 而Ingress可以避免這個問題, 除了Ingress自身服務(wù)可能需要映射出去, 其他服務(wù)都不要用NodePort方式

2、Ingress-nginx工作原理

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

二、Ingress-nginx配置示例

注:文中所有的yaml文件及鏡像都可以通過我的網(wǎng)盤鏈接下載(httpd和tomcat除外)。

1、搭建registry私有倉庫(可跳過配置私有倉庫,選擇手動導(dǎo)入所需鏡像到相應(yīng)節(jié)點(diǎn))

#運(yùn)行registry私有倉庫
[root@master ~]# docker run -tid --name registry -p 5000:5000 --restart always registry
[root@master ~]# vim /usr/lib/systemd/system/docker.service      #修改配置文件,指定私有倉庫
ExecStart=/usr/bin/dockerd -H unix:// --insecure-registry 192.168.20.6:5000
#將修改后的文件發(fā)送到k8s群集中的其他節(jié)點(diǎn)
[root@master ~]# scp /usr/lib/systemd/system/docker.service root@node01:/usr/lib/systemd/system/
docker.service                      100% 1637     1.6KB/s   00:00    
[root@master ~]# scp /usr/lib/systemd/system/docker.service root@node02:/usr/lib/systemd/system/
#在各個節(jié)點(diǎn)包括master上執(zhí)行以下命令,重啟docker,使更改生效
[root@master ~]# systemctl daemon-reload 
[root@master ~]# systemctl restart docker
#上傳測試所需的鏡像到私有倉庫
[root@master ~]# docker push 192.168.20.6:5000/httpd:v1 
[root@master ~]# docker push 192.168.20.6:5000/tomcat:v1 

2、創(chuàng)建namespace(也可跳過,使用默認(rèn)的default名稱空間也可以,但需要刪除下面所有yaml文件中關(guān)于自定義的名稱空間的配置字段)

[root@master ~]# kubectl create ns test-ns     #創(chuàng)建名稱空間test-ns
[root@master ~]# kubectl get ns   #確認(rèn)創(chuàng)建成功

3、創(chuàng)建Deployment、Service資源對象

1)創(chuàng)建httpd服務(wù)及其service
[root@master test]# vim httpd-01.yaml    #編寫基于httpd服務(wù)的資源對象

kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: web01
  namespace: test-ns
spec:
  replicas: 3
  template:
    metadata:
      labels:
        app: httpd01
    spec:
      containers:
      - name: httpd
        image: 192.168.20.6:5000/httpd:v1
---
apiVersion: v1
kind: Service
metadata:
  name: httpd-svc
  namespace: test-ns
spec:
  selector:
    app: httpd01
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
[root@master test]# kubectl apply -f httpd-01.yaml      #執(zhí)行yaml文件
2)創(chuàng)建tomcat服務(wù)及其service
[root@master test]# vim tomcat-01.yaml   #編寫yaml文件如下

kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: web02
  namespace: test-ns
spec:
  replicas: 3
  template:
    metadata:
      labels:
        app: tomcat01
    spec:
      containers:
      - name: tomcat
        image: 192.168.20.6:5000/tomcat:v1
---
apiVersion: v1
kind: Service
metadata:
  name: tomcat-svc
  namespace: test-ns
spec:
  selector:
    app: tomcat01
  ports:
  - protocol: TCP
    port: 8080
    targetPort: 8080
[root@master test]# kubectl apply -f tomcat-01.yaml    #執(zhí)行yaml文件
3)確認(rèn)成功創(chuàng)建上述資源對象
[root@master test]# kubectl get po -n test-ns        #確定pod是正常運(yùn)行狀態(tài)
NAME                     READY   STATUS    RESTARTS   AGE
web01-757cfc547d-fmjnt   1/1     Running   0          8m24s
web01-757cfc547d-pjrrt   1/1     Running   0          9m30s
web01-757cfc547d-v7tdb   1/1     Running   0          8m24s
web02-57c46c759d-l9qzx   1/1     Running   0          4m9s
web02-57c46c759d-vs6mg   1/1     Running   0          4m9s
web02-57c46c759d-zknrw   1/1     Running   0          4m9s
[root@master test]# kubectl get svc -n test-ns     #確認(rèn)SVC創(chuàng)建成功
NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
httpd-svc    ClusterIP   10.107.211.219   <none>        80/TCP     10m
tomcat-svc   ClusterIP   10.101.159.1     <none>        8080/TCP   5m8s
#訪問SVC的clusterIP+端口,確定可以訪問到后端Pod
[root@master test]# curl -I 10.101.159.1:8080    #訪問tomcat
HTTP/1.1 200       #返回狀態(tài)碼為200
Content-Type: text/html;charset=UTF-8
Transfer-Encoding: chunked
Date: Fri, 22 Nov 2019 12:34:32 GMT

[root@master test]# curl -I 10.107.211.219:80    #訪問httpd
HTTP/1.1 200 OK      #狀態(tài)碼為200
Date: Fri, 22 Nov 2019 12:34:39 GMT
Server: Apache/2.4.41 (Unix)         #版本號也有
Last-Modified: Sat, 16 Nov 2019 10:00:39 GMT
ETag: "1a-59773c95e7fc0"
Accept-Ranges: bytes
Content-Length: 26
Content-Type: text/html
#如果在上述訪問測試中,沒有訪問到相應(yīng)的pod,建議使用“kubectl describe svc”命令,
#查看相應(yīng)的service中的Endpoints列中有沒有關(guān)聯(lián)后端pod。

4、創(chuàng)建Ingress-nginx資源對象

下載我提供的鏡像并導(dǎo)入到需要運(yùn)行Ingress-nginx的節(jié)點(diǎn)上,也可以選擇自行下載其他鏡像。

方法1:去gitlab搜索Ingress-nginx,點(diǎn)擊“deploy”,再點(diǎn)擊頁面下的跳轉(zhuǎn)鏈接,即可看到如下命令:

K8s之Ingress-nginx原理及配置

#不要直接復(fù)制命令到終端執(zhí)行,先將yaml文件下載下來
[root@master test]# wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/mandatory.yaml
[root@master test]# vim mandatory.yaml      #修改其yaml文件
#修改以下內(nèi)容
    spec:               #這是在212行的spec字段
      hostNetwork: true          #添加這行,表示使用主機(jī)網(wǎng)絡(luò)
      # wait up to five minutes for the drain of connections
      terminationGracePeriodSeconds: 300
      serviceAccountName: nginx-ingress-serviceaccount
      nodeSelector:
        Ingress: nginx     #設(shè)置節(jié)點(diǎn)的標(biāo)簽選擇器,指定在哪臺節(jié)點(diǎn)上運(yùn)行
      containers:
        - name: nginx-ingress-controller
          image: quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.26.1
#上面是指定使用什么鏡像,若需要更改鏡像名稱,改這里即可,我保持默認(rèn)。
#修改后保存退出即可
[root@master test]# kubectl label nodes node01 Ingress=nginx 
#對node01節(jié)點(diǎn)打相應(yīng)的標(biāo)簽,以便指定Ingress-nginx運(yùn)行在node01
#可以執(zhí)行下面的命令,查看node01的標(biāo)簽是否存在
[root@master test]# kubectl get nodes node01 --show-labels 
#在node01節(jié)點(diǎn)執(zhí)行下面命令,導(dǎo)入Ingress-nginx鏡像(自行上傳這個包,我提供的網(wǎng)盤鏈接中有)
[root@node01 ~]# docker load < nginx-ingress-controller.0.26.1.tar 
#手動將ingress-nginx鏡像導(dǎo)入到node01節(jié)點(diǎn)
#回到master節(jié)點(diǎn),執(zhí)行yaml文件
[root@master test]# kubectl apply -f mandatory.yaml   #執(zhí)行ingress-nginx的yaml文件

關(guān)于上面yaml文件中寫入的“hostNetwork: true”具體解釋:如果使用此網(wǎng)絡(luò)參數(shù),那么pod中運(yùn)行的應(yīng)用程序可以直接使用Node節(jié)點(diǎn)端口,這樣node節(jié)點(diǎn)主機(jī)所在的網(wǎng)絡(luò)的其他主機(jī),都可以通過訪問到此應(yīng)用程序。

確定Ingress-nginx的容器運(yùn)行正常:
[root@master test]# kubectl get pod -n ingress-nginx -o wide
NAME                                        READY   STATUS    RESTARTS   AGE    IP             NODE     NOMINATED NODE   READINESS GATES
nginx-ingress-controller-77c8f6577b-6shdc   1/1     Running   0          107s   192.168.20.7   node01   <none>           <none>

5、定義Ingress規(guī)則(編寫ingress的yaml文件)

[root@master test]# vim ingress.yaml      #編寫yaml文件如下

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: test-ingress
  namespace: test-ns
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: www.test01.com
    http:
      paths:
      - path: /
        backend:
          serviceName: httpd-svc
          servicePort: 80
      - path: /tomcat
        backend:
          serviceName: tomcat-svc
          servicePort: 8080
[root@master test]# kubectl apply -f ingress.yaml      #執(zhí)行ingress規(guī)則的yaml文件
[root@master test]# kubectl get ingresses -n test-ns      #查看ingresses規(guī)則資源對象
NAME           HOSTS            ADDRESS   PORTS   AGE
test-ingress   www.test01.com             80      28s

其實(shí),至此已經(jīng)實(shí)現(xiàn)了我們想要的功能,現(xiàn)在就可以通過www.test01.com 來訪問到我們后端httpd容器提供的服務(wù),通過www.test01.com/tomcat 來訪問我們后端tomcat提供的服務(wù),當(dāng)然,前提是自行配置DNS解析,或者直接修改client的hosts文件。訪問頁面如下(注意:一定要自己解決域名解析的問題,若不知道域名對應(yīng)的是哪個IP,請?zhí)^這兩個圖,看下面的文字解釋):

訪問httpd服務(wù)(首頁內(nèi)容是我自定義的):
K8s之Ingress-nginx原理及配置

訪問tomcat服務(wù):

K8s之Ingress-nginx原理及配置

在上面的訪問測試中,雖然訪問到了對應(yīng)的服務(wù),但是有一個弊端,就是在做DNS解析的時(shí)候,只能指定Ingress-nginx容器所在的節(jié)點(diǎn)IP。而指定k8s集群內(nèi)部的其他節(jié)點(diǎn)IP(包括master)都是不可以訪問到的,如果這個節(jié)點(diǎn)一旦宕機(jī),Ingress-nginx容器被轉(zhuǎn)移到其他節(jié)點(diǎn)上運(yùn)行(不考慮節(jié)點(diǎn)標(biāo)簽的問題,其實(shí)保持Ingress-nginx的yaml文件中默認(rèn)的標(biāo)簽的話,那么每個節(jié)點(diǎn)都是有那個標(biāo)簽的)。隨之還要我們手動去更改DNS解析的IP(要更改為Ingress-nginx容器所在節(jié)點(diǎn)的IP,通過命令“kubectl get pod -n ingress-nginx -o wide”可以查看到其所在節(jié)點(diǎn)),很是麻煩。

有沒有更簡單的一種方法呢?答案是肯定的,就是我們?yōu)镮ngress-nginx規(guī)則再創(chuàng)建一個類型為nodePort的Service,這樣,在配置DNS解析時(shí),就可以使用www.test01.com 綁定所有node節(jié)點(diǎn),包括master節(jié)點(diǎn)的IP了,很是靈活。

6、為Ingress規(guī)則創(chuàng)建一個Service

就在剛才找到Ingress-nginx的yaml文件的頁面,然后下拉頁面,即可看到以下,可以根據(jù)k8s集群環(huán)境來選擇適合自己的yaml文件,假如自己是在Azure云平臺搭建的K8s集群,則選擇復(fù)制Azure下面的命令即可,我這里是自己的測試環(huán)境,所以選擇Bare-metal下面的yaml文件:
K8s之Ingress-nginx原理及配置

創(chuàng)建這個Service有兩種方法,一是直接復(fù)制其web頁面的命令到master節(jié)點(diǎn)上執(zhí)行,二是將其鏈接地址復(fù)制到終端使用wget下載下來再執(zhí)行,我選擇第二種方法,因?yàn)槲蚁肟纯蠢锩娴膬?nèi)容:

#將其下載到本地
[root@master test]# wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/provider/baremetal/service-nodeport.yaml
[root@master test]# 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

---
[root@master test]# kubectl apply -f service-nodeport.yaml       #執(zhí)行下載下來的yaml文件
[root@master test]# kubectl get svc -n ingress-nginx    #查看運(yùn)行的service
NAME            TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
ingress-nginx   NodePort   10.109.106.246   <none>        80:30465/TCP,443:32432/TCP   56s
#可以看到service分別將80和443端口映射到了節(jié)點(diǎn)的30645和32432端口(隨機(jī)映射的,也可以修改yaml文件指定端口)。

至此,這個www.test01.com 的域名即可和群集中任意節(jié)點(diǎn)的30465/32432端口進(jìn)行綁定了。

測試如下(域名解析對應(yīng)的IP可以是k8s群集內(nèi)的任意節(jié)點(diǎn)IP):

K8s之Ingress-nginx原理及配置

K8s之Ingress-nginx原理及配置

至此,就實(shí)現(xiàn)了最初的需求。

基于虛擬主機(jī)的Ingress規(guī)則

如果現(xiàn)在是另一種需求,我需要將www.test01.com 和www.test02.com 都對應(yīng)上我后端的httpd容器提供的服務(wù),那么此時(shí)應(yīng)該怎么配置?

配置如下(基于上面的環(huán)境進(jìn)行配置):
[root@master test]# vim ingress.yaml       #修改ingress規(guī)則的yaml文件如下

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: test-ingress
  namespace: test-ns
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: www.test02.com  #增加這一段host配置
    http:
      paths:
      - path: /
        backend:
          serviceName: httpd-svc     #綁定和www.test01相同的service名字即可
          servicePort: 80
  - host: www.test01.com
    http:
      paths:
      - path: /
        backend:
          serviceName: httpd-svc
          servicePort: 80
      - path: /tomcat
        backend:
          serviceName: tomcat-svc
          servicePort: 8080
#增加完上述的host字段保存退出即可
[root@master test]# kubectl apply -f ingress.yaml    #重新執(zhí)行yaml文件

至此,即可實(shí)現(xiàn)訪問www.test01.com 和www.test02.com 都可以訪問到后端的httpd提供的頁面(自行解決域名解析問題),如下:

訪問www.test01.com:30465
K8s之Ingress-nginx原理及配置

訪問www.test02.com:30465
K8s之Ingress-nginx原理及配置

總結(jié)上述示例的pod是如何一步一步可以使client訪問到的,總結(jié)如下:

后端pod===》service====》ingress規(guī)則====》寫入Ingress-nginx-controller配置文件并自動重載使更改生效===》對Ingress-nginx創(chuàng)建service====》實(shí)現(xiàn)client無論通過哪個K8節(jié)點(diǎn)的IP+端口都可以訪問到后端pod

三、配置HTTPS

在上面的操作中,實(shí)現(xiàn)了使用ingress-nginx為后端所有pod提供一個統(tǒng)一的入口,那么,有一個非常嚴(yán)肅的問題需要考慮,就是如何為我們的pod配置CA證書來實(shí)現(xiàn)HTTPS訪問?在pod中直接配置CA么?那需要進(jìn)行多少重復(fù)性的操作?而且,pod是隨時(shí)可能被kubelet殺死再創(chuàng)建的。當(dāng)然這些問題有很多解決方法,比如直接將CA配置到鏡像中,但是這樣又需要很多個CA證書。

這里有更簡便的一種方法,就拿上面的情況來說,后端有多個pod,pod與service進(jìn)行關(guān)聯(lián),service又被ingress規(guī)則發(fā)現(xiàn)并動態(tài)寫入到ingress-nginx-controller容器中,然后又為ingress-nginx-controller創(chuàng)建了一個Service映射到群集節(jié)點(diǎn)上的端口,來供client來訪問。

在上面的一系列流程中,關(guān)鍵的點(diǎn)就在于ingress規(guī)則,我們只需要在ingress的yaml文件中,為域名配置CA證書即可,只要可以通過HTTPS訪問到域名,至于這個域名是怎么關(guān)聯(lián)到后端提供服務(wù)的pod,這就是屬于k8s群集內(nèi)部的通信了,即便是使用http來通信,也無傷大雅。

配置如下:

接下來的配置與上面的配置基本沒什么關(guān)系,但是由于上面已經(jīng)運(yùn)行了Ingress-nginx-controller容器,所以這里就沒有必要再運(yùn)行了。只需要配置pod、service、ingress規(guī)則即可。

#創(chuàng)建CA證書(測試環(huán)境,自己創(chuàng)建吧)
[root@master https]# openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=nginxsvc/O=nginxsvc"
#當(dāng)前目錄下會生成兩個文件,如下:
[root@master https]# ls      #確定當(dāng)前目錄下有這兩個文件
tls.crt  tls.key
#將生成的CA證書存儲到etcd
[root@master https]# kubectl create secret tls tls-secret --key=tls.key --cert tls.crt
#創(chuàng)建deploy、service、ingress資源對象
[root@master https]# vim httpd03.yaml      #編寫yaml文件

kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: web03
spec:
  replicas: 2
  template:
    metadata:
      labels:
        app: httpd03
    spec:
      containers:
      - name: httpd3
        image: 192.168.20.6:5000/httpd:v1
---
apiVersion: v1
kind: Service
metadata:
  name: httpd-svc3
spec:
  selector:
    app: httpd03
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: test-ingress3
spec:
  tls:
    - hosts:
      - www.test03.com
      secretName: tls-secret         #這里是指定的是etcd存儲的CA證書名稱
  rules:
  - host: www.test03.com
    http:
      paths:
      - path: /
        backend:
          serviceName: httpd-svc3
          servicePort: 80
[root@master https]# kubectl apply -f httpd03.yaml     #執(zhí)行yaml文件

確認(rèn)創(chuàng)建的資源對象正常運(yùn)行:

[root@master https]# kubectl get svc      #查看svc
NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE
httpd-svc3   ClusterIP   10.98.180.104   <none>        80/TCP    31s
kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP   19d
[root@master https]# kubectl get pod      #查看pod
NAME                    READY   STATUS    RESTARTS   AGE
web03-66dfbc8cf-w6vvp   1/1     Running   0          34s
web03-66dfbc8cf-zgxd7   1/1     Running   0          34s
[root@master https]# kubectl describe ingresses    #查看ingress規(guī)則
Name:             test-ingress3
Namespace:        default
Address:          10.109.106.246
Default backend:  default-http-backend:80 (<none>)
TLS:
  tls-secret terminates www.test03.com
Rules:
  Host            Path  Backends
  ----            ----  --------
  www.test03.com  
                  /   httpd-svc3:80 (10.244.1.13:80,10.244.2.9:80)
#確定關(guān)聯(lián)到對應(yīng)的service及后端的pod

https訪問測試:

使用https://www.test03.com 進(jìn)行訪問(自行解決域名解析問題)
K8s之Ingress-nginx原理及配置

K8s之Ingress-nginx原理及配置

———————— 本文至此結(jié)束,感謝閱讀 ————————

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

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI