国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【K8S 云原生】K8S的對(duì)外服務(wù)—ingress

這篇具有很好參考價(jià)值的文章主要介紹了【K8S 云原生】K8S的對(duì)外服務(wù)—ingress。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

目錄

一、K8S的Service

1、Service的作用

2、Service類型:

二、ingress

1、ingress的組成:

2、ingress資源的定義項(xiàng):

三、nginx-ingress-controller暴露服務(wù)端的方式

1、Deployment+LoadBalancer模式:

1、工作流程圖:

2、Daemonset+hostnetwork+nodeSelector模式:

1、工作流程圖

2、實(shí)驗(yàn):

3、deployment+NodePort

1、實(shí)驗(yàn):

4、通過(guò)虛擬主機(jī)的方式實(shí)現(xiàn)http代理

5、ingress實(shí)現(xiàn)https代理訪問(wèn):

5.1、nginx的登錄賬戶認(rèn)證:

5.2、nginx的重寫:

6、總結(jié):

四、traefik-ingress暴露服務(wù)端的方式:

1、概念

?2、工作流程圖

3、traefik-ingress暴露服務(wù)端的方式

3.1、Daemonset模式:

3.2、deployment模式:

4、traefik-ingress和nginx-ingress的區(qū)別:

5、實(shí)驗(yàn):

1、deployment模式:

2、Daemonset模式:

五、總結(jié):


一、K8S的Service

1、Service的作用

Service的作用體現(xiàn)在兩個(gè)方面:

1、集群內(nèi)部:不斷跟蹤pod的變化,更新endpoints中的pod對(duì)象,基于pod的IP地址不斷變化的一種服務(wù)發(fā)現(xiàn)機(jī)制

2、集群外部:類似負(fù)載均衡器,可以把流量IP+端口,不涉及轉(zhuǎn)發(fā)url(http、https),把請(qǐng)求轉(zhuǎn)發(fā)到pod中

2、Service類型:

NodePort:容器端口—Service端口—NodePort映射。設(shè)定了NodePort之后每個(gè)節(jié)點(diǎn)都會(huì)有一個(gè)端口被打開(kāi)30000-32767

LoadBalancer:云平臺(tái)上的Service服務(wù)。由云平臺(tái)提供負(fù)載均衡的IP地址

ExternalName:域名映射

ingress:基于域名進(jìn)行映射,轉(zhuǎn)發(fā)的是url請(qǐng)求(http、https)轉(zhuǎn)發(fā)到Service,再由Service轉(zhuǎn)發(fā)到每一個(gè)pod

ingress只需要一個(gè)或者是少量的公網(wǎng)IP或者LB,可以把多個(gè)http請(qǐng)求暴露到外網(wǎng)

他是七層反向代理

可以將ingress理解為,Service的Service。是一組基于域名和url路徑把請(qǐng)求轉(zhuǎn)發(fā)到一個(gè)或者多個(gè)請(qǐng)求轉(zhuǎn)發(fā)到Service的規(guī)則

ingress先七層轉(zhuǎn)發(fā)轉(zhuǎn)發(fā)都Service,Service再四層轉(zhuǎn)發(fā)轉(zhuǎn)發(fā)到pod

二、ingress

1、ingress的組成:

ingress是一個(gè)api對(duì)象,通過(guò)yaml文件來(lái)進(jìn)行配置。ingress作用就是定義請(qǐng)求如何轉(zhuǎn)發(fā)到Service的規(guī)則

ingress通過(guò)http和https暴露集群內(nèi)部的Service,給Service提供一個(gè)外部的url、負(fù)載均衡、ssl/tls(https)的能力,實(shí)現(xiàn)一個(gè)基于域名的負(fù)載均衡

ingress-controller:由這個(gè)組件來(lái)具體的實(shí)現(xiàn)反向代理和負(fù)載均衡的程序,以及對(duì)ingress定義的規(guī)則進(jìn)行解析,根據(jù)ingress的配置的規(guī)則進(jìn)行請(qǐng)求的轉(zhuǎn)發(fā)。

但是這個(gè)ingress-controller不是K8S自帶的組件功能,ingress-controller是一個(gè)統(tǒng)稱(一系列工具)

比如nginx ingress-controller、traefik都是ingress-controller,開(kāi)源的軟件

ingress-controller是pod的方式運(yùn)行在節(jié)點(diǎn)上

2、ingress資源的定義項(xiàng):

  1. 定義外部流量的路由規(guī)則
  2. 定義的服務(wù)暴露的方式、主機(jī)名、訪問(wèn)的路徑和其他的一些選項(xiàng)
  3. 負(fù)載均衡(ingress-controller實(shí)現(xiàn))

三、nginx-ingress-controller暴露服務(wù)端的方式

1、Deployment+LoadBalancer模式:

ingress部署在公有云。ingress配置文件中會(huì)有type。type:LoadBalancer。公有云平臺(tái)會(huì)為這個(gè)LoadBalancer的Service自動(dòng)創(chuàng)建一個(gè)負(fù)載均衡器。綁定公網(wǎng)地址

通過(guò)域名指向公網(wǎng)地址,實(shí)現(xiàn)集群對(duì)外暴露

1、工作流程圖:

【K8S 云原生】K8S的對(duì)外服務(wù)—ingress,Kurbernetes,云原生,kubernetes,容器

2、Daemonset+hostnetwork+nodeSelector模式:

Daemonset:在每個(gè)節(jié)點(diǎn)都會(huì)創(chuàng)建一個(gè)pod

hostnetwork:共享節(jié)點(diǎn)主機(jī)的網(wǎng)絡(luò)命名空間。容器內(nèi)直接使用節(jié)點(diǎn)主機(jī)的IP+端口。pod上的容器可以直接訪問(wèn)主機(jī)上的網(wǎng)絡(luò)資源

nodeSelector:根據(jù)標(biāo)簽選擇部署的節(jié)點(diǎn)。選擇nginx-ingress-controller部署的節(jié)點(diǎn)

缺點(diǎn):直接利用節(jié)點(diǎn)主機(jī)的網(wǎng)絡(luò)和端口資源,一個(gè)node只能部署一個(gè)ingress-controller的pod

適用場(chǎng)景:大并發(fā)場(chǎng)景的生產(chǎn)環(huán)境。性能是最好的

1、工作流程圖

【K8S 云原生】K8S的對(duì)外服務(wù)—ingress,Kurbernetes,云原生,kubernetes,容器【K8S 云原生】K8S的對(duì)外服務(wù)—ingress,Kurbernetes,云原生,kubernetes,容器

Service和endpoints來(lái)發(fā)現(xiàn)節(jié)點(diǎn)

最終轉(zhuǎn)發(fā)是由ingress-controller來(lái)轉(zhuǎn)發(fā)請(qǐng)求(http)和負(fù)載均衡

用DaemonSet結(jié)合nodeselector來(lái)部署ingress-controller到特定的node上,然后使用HostNetwork直接把該pod與宿主機(jī)node的網(wǎng)絡(luò)打通,直接使用宿主機(jī)的80/433端口就能訪問(wèn)服務(wù)。這時(shí),ingress-controller所在的node機(jī)器就很類似傳統(tǒng)架構(gòu)的邊緣節(jié)點(diǎn),比如機(jī)房入口的nginx服務(wù)器。該方式整個(gè)請(qǐng)求鏈路最簡(jiǎn)單,性能相對(duì)NodePort模式更好。

缺點(diǎn)是由于直接利用宿主機(jī)節(jié)點(diǎn)的網(wǎng)絡(luò)和端口,一個(gè)node只能部署一個(gè)ingress-controller pod。 比較適合大并發(fā)的生產(chǎn)環(huán)境使用。

2、實(shí)驗(yàn):
#mandatory.yaml文件中包含了很多資源的創(chuàng)建,包括namespace、ConfigMap、role,ServiceAccount等等所有部署ingress-controller需要的資源。

官方下載地址:
wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.25.0/deploy/static/mandatory.yaml


上面可能無(wú)法下載,可用國(guó)內(nèi)的 gitee
wget https://gitee.com/mirrors/ingress-nginx/raw/nginx-0.25.0/deploy/static/mandatory.yaml
wget https://gitee.com/mirrors/ingress-nginx/raw/nginx-0.30.0/deploy/static/mandatory.yaml

DaemonSet+HostNetwork具體的部署過(guò)程?

下載安裝ingress-controller pod及相關(guān)資源

每個(gè)節(jié)點(diǎn)上,上傳ingress-contro控制器

解壓安裝
tar -xf ingree.contro-0.30.0.tar.gz
docker load -i ingree.contro-0.30.0.tar



#節(jié)點(diǎn)打標(biāo)簽,用于選擇節(jié)點(diǎn)部署ingress-controller
kubectl label nodes node02 ingress=true

192-215行修改配置文件

【K8S 云原生】K8S的對(duì)外服務(wù)—ingress,Kurbernetes,云原生,kubernetes,容器

啟動(dòng) nginx-ingress-controller,并檢查該pod的運(yùn)行狀況?

kubectl apply -f mandatory.yaml

#nginx-ingress-controller 已經(jīng)運(yùn)行 node02 節(jié)點(diǎn)
kubectl get pod -n ingress-nginx -o wide

kubectl get cm,daemonset -n ingress-nginx -o wide

#到 node02 節(jié)點(diǎn)查看
netstat -lntp | grep nginx

【K8S 云原生】K8S的對(duì)外服務(wù)—ingress,Kurbernetes,云原生,kubernetes,容器

由于配置了 hostnetwork,nginx 已經(jīng)在 node 主機(jī)本地監(jiān)聽(tīng) 80/443/8181 端口。其中 8181 是 nginx-controller 默認(rèn)配置的一個(gè) default backend(Ingress 資源沒(méi)有匹配的 rule 對(duì)象時(shí),流量就會(huì)被導(dǎo)向這個(gè) default backend)。

這樣,只要訪問(wèn) node 主機(jī)有公網(wǎng) IP,就可以直接映射域名來(lái)對(duì)外網(wǎng)暴露服務(wù)了。如果要 nginx 高可用的話,可以在多個(gè) node

上部署,并在前面再搭建一套 LVS+keepalived 做負(fù)載均衡。

創(chuàng)建 ingress 規(guī)則

創(chuàng)建一個(gè)業(yè)務(wù)pod和svc資源和ingress規(guī)則:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: nfs-pvc
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: nfs-client-storageclass
  resources:
    requests:
      storage: 2Gi

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-app
  labels:
    app: nginx1
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx1
  template:
    metadata:
      labels:
        app: nginx1
    spec:
      containers:
        - name: nginx
          image: nginx:1.22
          volumeMounts:
          - name: nfs-pvc
            mountPath: /usr/share/nginx/html
      volumes:
      - name: nfs-pvc
        persistentVolumeClaim:
          claimName: nfs-pvc

---
apiVersion: v1
kind: Service
metadata:
  name: nginx-app-svc
spec:
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
  selector:
    app: nginx1

---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: nginx-app-ingress
spec:
  rules:
  - host: www.test1.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: nginx-app-svc
            port:
              number: 80
#選擇一臺(tái)客戶機(jī),直接添加node02的節(jié)點(diǎn)的IP與pod的域名進(jìn)行映射
vim /etc/hosts
20.0.0.63 www.test1.com
 
訪問(wèn)curl www.test1.com

3、deployment+NodePort

同樣用deployment模式部署ingress-controller,并創(chuàng)建對(duì)應(yīng)的service,但是type為NodePort。這樣,ingress就會(huì)暴露在集群節(jié)點(diǎn)ip的特定端口上。由于nodeport暴露的端口是隨機(jī)端口,一般會(huì)在前面再搭建一套負(fù)載均衡器來(lái)轉(zhuǎn)發(fā)請(qǐng)求。該方式一般用于宿主機(jī)是相對(duì)固定的環(huán)境ip地址不變的場(chǎng)景

NodePort方式暴露ingress雖然簡(jiǎn)單方便,但是NodePort多了一層NAT,在請(qǐng)求量級(jí)很大時(shí)可能對(duì)性能會(huì)有一定影響

【K8S 云原生】K8S的對(duì)外服務(wù)—ingress,Kurbernetes,云原生,kubernetes,容器

1、實(shí)驗(yàn):

如果做了上一個(gè)操作,就將所有的yaml文件通過(guò)delete進(jìn)行清除。繼續(xù)下面的操作?

下載相關(guān)的ingress和service-nodeport模板
mkdir /opt/ingress/test
cd /opt/ingress/test
#官方下載地址:
wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.30.0/deploy/static/mandatory.yaml
wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.30.0/deploy/static/provider/baremetal/service-nodeport.yaml
 
#國(guó)內(nèi) gitee 資源地址:
wget https://gitee.com/mirrors/ingress-nginx/raw/nginx-0.30.0/deploy/static/mandatory.yaml
wget https://gitee.com/mirrors/ingress-nginx/raw/nginx-0.30.0/deploy/static/provider/baremetal/service-nodeport.yaml
 
#在所有 node 節(jié)點(diǎn)上傳鏡像包 ingress-controller-0.30.0.tar 到 /opt/ingress-nodeport 目錄,并加載鏡像
docker load -i ingress-controller-0.30.0.tar

直接啟動(dòng)官方模板即可使用

#若是新的mandatory.yaml文件,直接啟動(dòng)即可,若是用上個(gè)實(shí)驗(yàn)的,要還原到最初始
kubectl apply -f mandatory.yaml

還原腳本如下:

在所有節(jié)點(diǎn)上部署ingress-controller

【K8S 云原生】K8S的對(duì)外服務(wù)—ingress,Kurbernetes,云原生,kubernetes,容器

#啟用Service-nodeport
kubectl apply -f service-nodeport.yaml
#//如果K8S Pod 調(diào)度失敗,在 kubectl describe pod資源時(shí)顯示:
Warning ?FailedScheduling ?18s (x2 over 18s) ?default-scheduler ?0/2 nodes are available: 2 node(s) didn't match node selector

解決方案:
1. 給需要調(diào)度的node加上對(duì)應(yīng)標(biāo)簽
# 相對(duì)上面這個(gè)Yaml文件的例子
kubectl label nodes node_name kubernetes.io/os=linux
2. 刪除Yaml文件中的nodeSelector,如果對(duì)節(jié)點(diǎn)沒(méi)有要求的話,直接刪除節(jié)點(diǎn)選擇器即可

【K8S 云原生】K8S的對(duì)外服務(wù)—ingress,Kurbernetes,云原生,kubernetes,容器

進(jìn)行Ingress Http代理訪問(wèn)的操作演示

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: nfs-pvc
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: nfs-client-storageclass
  resources:
    requests:
      storage: 2Gi

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-app
  labels:
    app: nginx1
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx1
  template:
    metadata:
      labels:
        app: nginx1
    spec:
      containers:
        - name: nginx
          image: nginx:1.22
          volumeMounts:
          - name: nfs-pvc
            mountPath: /usr/share/nginx/html
      volumes:
      - name: nfs-pvc
        persistentVolumeClaim:
          claimName: nfs-pvc

---
apiVersion: v1
kind: Service
metadata:
  name: nginx-app-svc
spec:
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
  selector:
    app: nginx1

---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: nginx-app-ingress
spec:
  rules:
  - host: www.test1.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: nginx-app-svc
            port:
              number: 80

訪問(wèn)IP+NodePort端口

【K8S 云原生】K8S的對(duì)外服務(wù)—ingress,Kurbernetes,云原生,kubernetes,容器【K8S 云原生】K8S的對(duì)外服務(wù)—ingress,Kurbernetes,云原生,kubernetes,容器

【K8S 云原生】K8S的對(duì)外服務(wù)—ingress,Kurbernetes,云原生,kubernetes,容器

工作流程:

每個(gè)節(jié)點(diǎn)都是從controller----接收到解析后的請(qǐng)求IP+端口----ingress-----Service----pod

總結(jié):

nginx-ingress-controller

host—>ingresss的配置找到pod—>controller—>請(qǐng)求發(fā)到pod

nodeport--->controller--->ingress--->service--->pod

NodePort暴露端口的方式最簡(jiǎn)單的方法,NodePort多了一層nat(地址轉(zhuǎn)換)

并發(fā)量大的對(duì)性能會(huì)有一定影響,內(nèi)部都會(huì)用nodePort

4、通過(guò)虛擬主機(jī)的方式實(shí)現(xiàn)http代理

通過(guò)ingress的方式實(shí)現(xiàn):一個(gè)ingress可以訪問(wèn)不同的主機(jī)

我們知道nginx和apache能夠設(shè)置三種虛擬主機(jī),分別為:基于IP,基于域名,基于端口。同樣ingress-nginx這里也可以設(shè)置出這三種虛擬主機(jī)。下面將以最常用的基于域名的虛擬主機(jī)為例子,進(jìn)行操作演示

先創(chuàng)建兩個(gè)pod和Service

虛擬主機(jī)1:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: deployment1
  labels:
    test: nginx1
spec:
  replicas: 1
  selector:
    matchLabels:
      test: nginx1
  template:
    metadata:
      labels:
        test: nginx1
    spec:
      containers:
        - name: nginx1
          image: nginx:1.22
---
apiVersion: v1
kind: Service
metadata:
  name: svc-1
spec:
  ports:
    - port: 80
      targetPort: 80
      protocol: TCP
  selector:
    test: nginx1

虛擬主機(jī)2將上面標(biāo)簽全部替換

【K8S 云原生】K8S的對(duì)外服務(wù)—ingress,Kurbernetes,云原生,kubernetes,容器

再創(chuàng)建ingress資源

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress1
spec:
  rules:
    - host: www1.test.com
      http:
        paths:
        - path: /
          pathType: Prefix
          backend:
            service:
              name: svc-1
              port:
                number: 80

---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress2
spec:
  rules:
    - host: www2.test.com
      http:
        paths:
        - path: /
          pathType: Prefix
          backend:
            service:
              name: svc-2
              port:
                number: 80

【K8S 云原生】K8S的對(duì)外服務(wù)—ingress,Kurbernetes,云原生,kubernetes,容器

映射域名:
vim /etc/hosts

#這里任意填寫一個(gè)node節(jié)點(diǎn)的IP即可
20.0.0.62 www.test.com www.abc.com ??

然后就可以基于域名+NodePort端口進(jìn)行訪問(wèn)了

5、ingress實(shí)現(xiàn)https代理訪問(wèn):

需要證書和秘鑰

創(chuàng)建證書 秘鑰

secrets保存密鑰信息,部署pod時(shí)把secrets掛載到pod

openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=nginxsvc/O=nginxsvc"


req:生成證書文件的
x509:生成x.509自簽名的證書
-sha256:表示使用sha-256散列算法
-nodes:表示生成到的秘鑰不加密
-day 365:證書有效期365天
-newkey rsa:2048:RSA的密鑰對(duì),長(zhǎng)度2048為位
-keyout tls.key -out tls.crt:密鑰文件key,證書文件crt
-subj "/CN=nginxsvc/O=nginxsvc":主題,CN: common name O:
kubectl create secret tls tls-secret --key tls.key --cert tls.crt
kubectl describe secrets tls-secret

【K8S 云原生】K8S的對(duì)外服務(wù)—ingress,Kurbernetes,云原生,kubernetes,容器

創(chuàng)建deployment、service、ingress

vim traefik-nginx.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-https
  labels:
    app: https

spec:
  replicas: 3
  selector:
    matchLabels:
      app: https
  template:
    metadata:
      labels:
        app: https
    spec:
      containers:
        - name: nginx
          image: nginx:1.22

---

apiVersion: v1
kind: Service
metadata:
  name: nginx-svc
spec:
  ports:
    - port: 80
      targetPort: 80
  selector:
    app: https

---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: nginx-ingress-https
spec:
  tls:
    - hosts:
      - www.123ccc.com
      secretName: tls-secret
  rules:
    - host: www.123ccc.com
      http:
        paths:
          - pathType: Prefix
            path: "/"
            backend:
              service:
                name: nginx-svc
                port:
                  number: 80
訪問(wèn)測(cè)試
域名:https端口
curl -k https://www.123ccc.com:32561

?

是基于service-nodeport.yaml完成的,首先要有ingress-nginx

【K8S 云原生】K8S的對(duì)外服務(wù)—ingress,Kurbernetes,云原生,kubernetes,容器

5.1、nginx的登錄賬戶認(rèn)證:

下載http,用htpasswd生成密鑰(這里秘鑰的名字只能值auth)

【K8S 云原生】K8S的對(duì)外服務(wù)—ingress,Kurbernetes,云原生,kubernetes,容器

創(chuàng)建秘鑰

【K8S 云原生】K8S的對(duì)外服務(wù)—ingress,Kurbernetes,云原生,kubernetes,容器

生成新的ingress:

htpasswd -c auth koeda
New password: 123456
Re-type new password: 123456

kubectl create secret generic basic-auth --from-file=auth


vim ingress-auth.yaml


apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-auth
  annotations:
#開(kāi)啟認(rèn)證模塊的配置
    nginx.ingress.kubernetes.io/auth-type: basic
#設(shè)置認(rèn)證類型為basic。是k8s自帶的認(rèn)證加密模塊
    nginx.ingress.kubernetes.io/auth-secret: basic-auth
#把認(rèn)證的加密模塊導(dǎo)入到ingress當(dāng)中
    nginx.ingress.kubernetes.io/auth-realm: 'Authentication Required-zyg'
#設(shè)置認(rèn)證窗口的提示信息。
spec:
  rules:
  - host: www.zyg.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: nginx-svc
            port:
              number: 80
#使用http創(chuàng)建basic-auth
#開(kāi)啟認(rèn)證加密的文件
#創(chuàng)建ingress開(kāi)啟認(rèn)證模式
#將auth配置文件導(dǎo)入ingress當(dāng)中

【K8S 云原生】K8S的對(duì)外服務(wù)—ingress,Kurbernetes,云原生,kubernetes,容器

做映射www.koeda.com

在虛擬機(jī)訪問(wèn)測(cè)試

5.2、nginx的重寫:

vim ingress-rewrite.yaml(要進(jìn)入加入https端口)

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: nginx-rewrite
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: https://www.123ccc.com:32561
spec:
  rules:
    - host: www.ddd.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: nginx-svc
                port:
                  number: 80

自定義域名需要映射

【K8S 云原生】K8S的對(duì)外服務(wù)—ingress,Kurbernetes,云原生,kubernetes,容器

通過(guò)www.ddd.com+http端口訪問(wèn)

【K8S 云原生】K8S的對(duì)外服務(wù)—ingress,Kurbernetes,云原生,kubernetes,容器

容器內(nèi)頁(yè)面跳轉(zhuǎn)

到此nginx-ingress-controller全部介紹完畢

6、總結(jié):

ingress兩個(gè)重要的組件:

nginx-ingress-controller

traefik-ingress-controller

都是開(kāi)源的ingress-controller

三種工作方式:

1、deployment+LoadBalancer,需要云平臺(tái)提供一個(gè)負(fù)載均衡的公網(wǎng)地址,公有云上做

2、Daemonset+hostnetwork+nodeSelector,指定節(jié)點(diǎn)部署controller,缺點(diǎn)就是和宿主機(jī)共享網(wǎng)絡(luò),只能是一個(gè)controller的pod

????????hostnetwork這個(gè)配置回合宿主機(jī)共享網(wǎng)絡(luò)資源

3、deployment+NodePort,最常見(jiàn),最常用,也是最簡(jiǎn)單的方式。他是集中一個(gè)NodePort端口,所有的ingress的請(qǐng)求都會(huì)轉(zhuǎn)發(fā)到NodePort,然后由Service把流量轉(zhuǎn)發(fā)到pod

一個(gè)ingress的NodePort可以實(shí)現(xiàn)訪問(wèn)多個(gè)虛擬主機(jī)(域名),和nginx是一樣的

四、traefik-ingress暴露服務(wù)端的方式:

1、概念

traefik是一個(gè)為了讓部署微服務(wù)更加快捷而誕生的一個(gè)http反向代理,負(fù)載均衡

traefik設(shè)計(jì)時(shí)就能實(shí)時(shí)的和K8S的api交互,可以感知后端service以及pod的變化,還可以自動(dòng)更新配置和重載

pod內(nèi)nginx容器,80 8081

traefik的部署方式:

Daemonset和deployment

?2、工作流程圖

【K8S 云原生】K8S的對(duì)外服務(wù)—ingress,Kurbernetes,云原生,kubernetes,容器

3、traefik-ingress暴露服務(wù)端的方式

3.1、Daemonset模式:

用的還是hostnetwork網(wǎng)絡(luò)模式

特點(diǎn):每個(gè)節(jié)點(diǎn)都會(huì)部署一個(gè)traefik。節(jié)點(diǎn)感知,可以自動(dòng)發(fā)現(xiàn),更新容器的配置,不需要手動(dòng)重載

缺點(diǎn):資源占用,大型集群中,Daemonset可能會(huì)運(yùn)行多個(gè)traefik的實(shí)例,尤其是在節(jié)點(diǎn)上不需要大量容器運(yùn)行的情況下。他是沒(méi)有辦法擴(kuò)所容器的

適用于部署對(duì)外集群:因?yàn)閷?duì)外的業(yè)務(wù)會(huì)經(jīng)常變更,使用Daemonset模式可以更好的、自動(dòng)的發(fā)現(xiàn)服務(wù)配置變更

3.2、deployment模式:

用的還是NodePort網(wǎng)絡(luò)模式

優(yōu)點(diǎn):集中控制,可以使用少量的實(shí)例來(lái)運(yùn)行處理整個(gè)集群的流量,更容易升級(jí)和維護(hù)。

缺點(diǎn):

deployment負(fù)載均衡不會(huì)均勻地分布到每個(gè)節(jié)點(diǎn)。

需要手動(dòng)更新,他無(wú)法感知容器的配置變化

適用于部署對(duì)內(nèi)集群:對(duì)內(nèi)的業(yè)務(wù)相對(duì)穩(wěn)定,更新和變化也比較少,適合deployment的方式

一般部署的時(shí)候會(huì)設(shè)置標(biāo)簽:

traffic-type:internal 聲明對(duì)內(nèi)服務(wù)

traffic-type:external 聲明對(duì)外服務(wù)

4、traefik-ingress和nginx-ingress的區(qū)別:

沒(méi)有大區(qū)別

工作原理都一樣,都是七層代理,都可以動(dòng)態(tài)的更新配置,都可以自動(dòng)發(fā)現(xiàn)服務(wù)

nginx-ingress:

自動(dòng)更新的重載模塊相對(duì)較慢

traefik-ingress

自動(dòng)更新的重載模塊更快、更方便

traefik的并發(fā)能力只有nginx-ingress的6成 60%

工作中見(jiàn)得最多的就是nginx-ingress-controller

5、實(shí)驗(yàn):

1、deployment模式:
?wget ?https://gitee.com/mirrors/traefik/raw/v1.7/examples/k8s/traefik-deployment.yaml
wget ?https://gitee.com/mirrors/traefik/raw/v1.7/examples/k8s/traefik-rbac.yaml
wget ?https://gitee.com/mirrors/traefik/raw/v1.7/examples/k8s/traefik-ds.yaml
wget ?https://gitee.com/mirrors/traefik/raw/v1.7/examples/k8s/ui.yaml

?
#先啟動(dòng)rbac權(quán)限配置
kubectl apply -f traefik-rbac.yaml

#再啟動(dòng)deployment或者Daemonset
kubectl apply -f traefik-deployment.yaml

#最后啟動(dòng)ui工具
kubectl apply -f ui.yaml

【K8S 云原生】K8S的對(duì)外服務(wù)—ingress,Kurbernetes,云原生,kubernetes,容器

【K8S 云原生】K8S的對(duì)外服務(wù)—ingress,Kurbernetes,云原生,kubernetes,容器

vim traefik-ingress-nginx.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-traefik
  labels:
    nginx: traefik
spec:
  replicas: 3
  selector:
    matchLabels:
      nginx: traefik
  template:
    metadata:
      labels:
        nginx: traefik
    spec:
      containers:
        - name: nginx
          image: nginx:1.22

---

apiVersion: v1
kind: Service
metadata:
  name: nginx-traefik-svc1
spec:
  ports:
    - port: 80
      targetPort: 80
      protocol: TCP
  selector:
    nginx: traefik

---

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: nginx-traefik-test1
spec:
  rules:
    - host: www.yyw.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: nginx-traefik-svc1
                port:
                  number: 80

ui查看發(fā)現(xiàn)

【K8S 云原生】K8S的對(duì)外服務(wù)—ingress,Kurbernetes,云原生,kubernetes,容器

2、Daemonset模式:

Daemonset,以及配置更新的自動(dòng)重載

先運(yùn)行traefik-ds.yaml,使用traefik的Daemonset+hostnetwork模式

創(chuàng)建configmap,掛載

worker_processes  2;
events {
    worker_connections  1024;
}
http {
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  localhost;
        charset utf-8;
        location / {
            root   /usr/share/nginx/html;
            index  index.html index.php;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
}
}



kubectl create configmap nginx-con --from-file=/opt/nginx-configmap/nginx.conf

創(chuàng)建業(yè)務(wù)資源,service和ingress


?

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: nginx-app
  labels:
    app: nginx1
spec:
  selector:
    matchLabels:
      app: nginx1
  template:
    metadata:
      labels:
        app: nginx1
    spec:
      containers:
        - name: nginx
          image: nginx:1.22
          volumeMounts:
            - name: nginx-config
              mountPath: /etc/nginx/
            - name: nginx-mount
              mountPath: /usr/share/nginx/html
      volumes:
        - name: nginx-config
          configMap:
            name: nginx-con
        - name: nginx-mount
          hostPath:
            path: /opt/html
            type: DirectoryOrCreate

---

apiVersion: v1
kind: Service
metadata:
  name: nginx-app-svc
spec:
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
  selector:
    app: nginx1

---

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: nginx-app-ingress
spec:
  rules:
    - host: www.test1.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: nginx-app-svc
                port:
                  number: 80

hostnetwork端口80,nginx監(jiān)聽(tīng)端口也是80

自動(dòng)發(fā)現(xiàn),ingress

【K8S 云原生】K8S的對(duì)外服務(wù)—ingress,Kurbernetes,云原生,kubernetes,容器

【K8S 云原生】K8S的對(duì)外服務(wù)—ingress,Kurbernetes,云原生,kubernetes,容器

【K8S 云原生】K8S的對(duì)外服務(wù)—ingress,Kurbernetes,云原生,kubernetes,容器

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: nginx-app
  labels:
    app: nginx1
spec:
  selector:
    matchLabels:
      app: nginx1
  template:
    metadata:
      labels:
        app: nginx1
    spec:
      containers:
        - name: nginx
          image: nginx:1.22
          volumeMounts:
            - name: nginx-config
              mountPath: /etc/nginx/
            - name: nginx-mount
              mountPath: /usr/share/nginx/html
      volumes:
        - name: nginx-config
          configMap:
            name: nginx-con
        - name: nginx-mount
          hostPath:
            path: /opt/html
            type: DirectoryOrCreate

---

apiVersion: v1
kind: Service
metadata:
  name: nginx-app-svc
spec:
  ports:
    - protocol: TCP
      port: 8081
      targetPort: 8081
  selector:
    app: nginx1

---

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: nginx-app-ingress
spec:
  rules:
    - host: www.test1.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: nginx-app-svc
                port:
                  number: 8081

重新運(yùn)行,將hostnetwork的監(jiān)聽(tīng)端口改成8081

kubectl edit cm nginx-con

更改configmap,將nginx的監(jiān)聽(tīng)端口改成8081

【K8S 云原生】K8S的對(duì)外服務(wù)—ingress,Kurbernetes,云原生,kubernetes,容器

【K8S 云原生】K8S的對(duì)外服務(wù)—ingress,Kurbernetes,云原生,kubernetes,容器

【K8S 云原生】K8S的對(duì)外服務(wù)—ingress,Kurbernetes,云原生,kubernetes,容器

五、總結(jié):

開(kāi)源的ingress控制軟件

nginx-ingress-controller

traefik-ingress-controller

nginx-ingress-controller:

模式:

deployment+LoadBalancer:公有云提供負(fù)載均衡的公網(wǎng)地址

Daemonset+hostnetwork+nodeSelector:和節(jié)點(diǎn)服務(wù)器共享網(wǎng)絡(luò),一個(gè)節(jié)點(diǎn)只能部署一個(gè)controller的pod,使用宿主機(jī)的端口,性能最好,適合大并發(fā)

deployment+NodePort:最常見(jiàn)也是最常用,也是最簡(jiǎn)單的方法。但是性能不太好,多了一層nat地址轉(zhuǎn)發(fā),不太適合大并發(fā)

traefik-ingress-controller:(小集群)

模式:

Daemonset模式:對(duì)外,可以自動(dòng)更新容器的配置。hostnetwork模式,用的是節(jié)點(diǎn)網(wǎng)絡(luò)

deployment模式:對(duì)內(nèi),無(wú)法自動(dòng)更新配置。NodePort網(wǎng)絡(luò)模式

https:

  1. 生成證書和秘鑰
  2. 創(chuàng)建Secret保存秘鑰
  3. 創(chuàng)建ingress的時(shí)候把Secret導(dǎo)入

加密認(rèn)證:

1、借助htpasswd工具,生成名字叫 auth 的秘鑰(文件名只能是auth)

2、創(chuàng)建ingress的兩行代碼

【K8S 云原生】K8S的對(duì)外服務(wù)—ingress,Kurbernetes,云原生,kubernetes,容器文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-800428.html

到了這里,關(guān)于【K8S 云原生】K8S的對(duì)外服務(wù)—ingress的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • k8s的對(duì)外服務(wù)ingress

    k8s的對(duì)外服務(wù)ingress

    1、service的作用體現(xiàn)在兩個(gè)方面 (1)集群內(nèi)部:不斷跟蹤pod的變化,更新deployment中的pod對(duì)象,基于pod的ip地址不斷變化的一種服務(wù)發(fā)現(xiàn)機(jī)制 (2)集群外部:類似于負(fù)載均衡器,把流量ip+端口,不涉及轉(zhuǎn)發(fā)url(http/https),把請(qǐng)求轉(zhuǎn)發(fā)到pod當(dāng)中 2、service nodeport 容器端口——s

    2024年01月22日
    瀏覽(19)
  • k8s的對(duì)外服務(wù)---ingress

    k8s的對(duì)外服務(wù)---ingress

    service的作用體現(xiàn)在兩個(gè)方面: 集群內(nèi)部:不斷追蹤pod的變化。他會(huì)更新endpoint中的pod對(duì)象,基于pod的IP地址不斷變化的一種服務(wù)發(fā)現(xiàn)機(jī)制。 集群外部:類似負(fù)載均衡器,把流量IP+端口,不涉及轉(zhuǎn)發(fā)url(http、https)。把請(qǐng)求轉(zhuǎn)發(fā)到pod當(dāng)中。 service有四種類型: ClusterIP:創(chuàng)建servic

    2024年01月20日
    瀏覽(21)
  • k8s 對(duì)外服務(wù)之 Ingress

    service的作用體現(xiàn)在兩個(gè)方面,對(duì)集群內(nèi)部,它不斷跟蹤pod的變化,更新endpoint中對(duì)應(yīng)pod的對(duì)象,提供了ip不斷變化的pod的服務(wù)發(fā)現(xiàn)機(jī)制;對(duì)集群外部,他類似負(fù)載均衡器,可以在集群內(nèi)外部對(duì)pod進(jìn)行訪問(wèn)。 在Kubernetes中,Pod的IP地址和service的ClusterIP僅可以在集群網(wǎng)絡(luò)內(nèi)部使用,

    2024年02月16日
    瀏覽(20)
  • k8s---ingress對(duì)外服務(wù)(traefik)

    k8s---ingress對(duì)外服務(wù)(traefik)

    目錄 ingress的證書訪問(wèn) traefik traefik的部署方式: deamonset deployment nginx-ingress與traefix-ingress相比較 nginx-ingress-controller ui訪問(wèn) deployment部署 ingress實(shí)現(xiàn)https代理訪問(wèn): 需要證書和密鑰 創(chuàng)建證書 密鑰 secrets 保存密鑰信息,部署pod時(shí)把secrets掛載到pod 創(chuàng)建密鑰和證書 nginx的登錄賬戶認(rèn)證

    2024年01月19日
    瀏覽(47)
  • k8s---ingress對(duì)外服務(wù)(ingress-controller)

    k8s---ingress對(duì)外服務(wù)(ingress-controller)

    k8s的對(duì)外服務(wù),ingress service作用現(xiàn)在兩個(gè)方面: 1、集群內(nèi)部:不斷跟蹤的變化,更新endpoint中的pod對(duì)象,基于pod的ip地址不斷變化的一種服務(wù)發(fā)現(xiàn)機(jī)制。 2、集群外部:類似于負(fù)載均衡器,把流量(ip+端口),不涉及轉(zhuǎn)發(fā)url(http https),把請(qǐng)求轉(zhuǎn)發(fā)到pod當(dāng)中。 service: NodePo

    2024年01月19日
    瀏覽(20)
  • k8s 對(duì)外服務(wù)之 ingress|ingress的對(duì)外暴露方式|ingress http,https代理|ingress nginx的認(rèn)證,nginx重寫

    k8s 對(duì)外服務(wù)之 ingress|ingress的對(duì)外暴露方式|ingress http,https代理|ingress nginx的認(rèn)證,nginx重寫

    service的作用體現(xiàn)在兩個(gè)方面,對(duì)集群內(nèi)部,它不斷跟蹤pod的變化,更新endpoint中對(duì)應(yīng)pod的對(duì)象,提供了ip不斷變化的pod的服務(wù)發(fā)現(xiàn)機(jī)制;對(duì)集群外部,他類似負(fù)載均衡器,可以在集群內(nèi)外部對(duì)pod進(jìn)行訪問(wèn)。 在Kubernetes中,Pod的IP地址和service的ClusterIP僅可以在集群網(wǎng)絡(luò)內(nèi)部使用,

    2024年02月10日
    瀏覽(27)
  • k8s svc通過(guò)externalIPs并結(jié)合Keepalived對(duì)外暴露服務(wù)

    Kubemetes 的 Service需要對(duì)集群外暴露,可以通過(guò)NodePort、Ingress和LoadBalancer,其中 NodePort:需要預(yù)先知道k8s集群節(jié)點(diǎn)的IP地址,在使用時(shí)需指定node的ip(這樣配置存在單點(diǎn)故障); Ingress:實(shí)現(xiàn)的是HTTP(S)負(fù)載均衡器,只能代理七層; LoadBalancer:需要通過(guò)云服務(wù)商提供的負(fù)載均衡器

    2024年02月05日
    瀏覽(55)
  • 【Kubernetes】Kubernetes對(duì)外服務(wù)之Ingress

    【Kubernetes】Kubernetes對(duì)外服務(wù)之Ingress

    ??service的作用體現(xiàn)在兩個(gè)方面,對(duì)集群內(nèi)部,它不斷跟蹤pod的變化,更新endpoint中對(duì)應(yīng)pod的對(duì)象,提供了ip不斷變化的pod的服務(wù)發(fā)現(xiàn)機(jī)制;對(duì)集群外部,他類似負(fù)載均衡器,可以在集群內(nèi)外部對(duì)pod進(jìn)行訪問(wèn)。 ??在Kubernetes中,Pod的IP地址和service的ClusterIP僅可以在集群網(wǎng)絡(luò)內(nèi)

    2024年02月12日
    瀏覽(20)
  • [云原生] K8s之ingress

    [云原生] K8s之ingress

    1.1 Ingress的簡(jiǎn)介? service的作用體現(xiàn)在兩個(gè)方面,對(duì)集群內(nèi)部,它不斷跟蹤pod的變化,更新endpoint中對(duì)應(yīng)pod的對(duì)象,提供了ip不斷變化的pod的服務(wù)發(fā)現(xiàn)機(jī)制;對(duì)集群外部,他類似負(fù)載均衡器,可以在集群內(nèi)外部對(duì)pod進(jìn)行訪問(wèn)。 在Kubernetes中,Pod的IP地址和service的ClusterIP僅可以在集

    2024年04月11日
    瀏覽(21)
  • 【K8S 基本概念】Kurbernetes的架構(gòu)和核心概念

    【K8S 基本概念】Kurbernetes的架構(gòu)和核心概念

    目錄 一、Kurbernetes 1.1 簡(jiǎn)介 1.2、K8S的特性: 1.3、docker和K8S: 1.4、K8S的作用: 1.5、K8S的特性: 二、K8S集群架構(gòu)與組件: 三、K8S的核心組件: 一、master組件: 1、kube-apiserver: 2、kube-controller-manager: 3、kube-scheduler: 4、ETCD組件: 二、node組件: 1、kubelet: 2、kube-proxy: 3、do

    2024年02月04日
    瀏覽(129)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包