溫馨提示×

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

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

k8s中ingress的安裝方法

發(fā)布時(shí)間:2021-07-07 16:55:01 來(lái)源:億速云 閱讀:227 作者:chen 欄目:云計(jì)算

這篇文章主要講解了“k8s中ingress的安裝方法”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“k8s中ingress的安裝方法”吧!

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

    NodePort 服務(wù)是暴露服務(wù)的最原始方式。 顧名思義,NodePort 會(huì)在所有節(jié)點(diǎn)(VM)上打開(kāi)一個(gè)特定的端口,并且發(fā)送到此端口的任何流量都將轉(zhuǎn)發(fā)到該服務(wù)。 這種方式主要有以下缺點(diǎn):

  • 每個(gè)端口只能有一個(gè)服務(wù)

  • 默認(rèn)您只能使用端口30000-32767

基于以上原因,我不建議在生產(chǎn)環(huán)境上用這種方式暴露服務(wù)。如果你運(yùn)行的服務(wù)不要求一直可用,或者對(duì)成本比較敏感,你可以使用這種方法。這樣的應(yīng)用的最佳例子是 demo 應(yīng)用,或者某些臨時(shí)應(yīng)用。

2.LoadBalancer

LoadBalancer 服務(wù)是暴露服務(wù)到 internet 的標(biāo)準(zhǔn)方式。這種方式會(huì)啟動(dòng)一個(gè) Network Load Balancer,它將給你一個(gè)單獨(dú)的 IP 地址,轉(zhuǎn)發(fā)所有流量到你的服務(wù)。

如果你想要直接暴露服務(wù),這就是默認(rèn)方式。所有通往你指定的端口的流量都會(huì)被轉(zhuǎn)發(fā)到對(duì)應(yīng)的服務(wù)。它沒(méi)有過(guò)濾條件,沒(méi)有路由等。這意味著你幾乎可以發(fā)送任何種類的流量到該服務(wù),像 HTTP,TCP,UDP,Websocket,gRPC 或其它任意種類。

這個(gè)方式的最大缺點(diǎn)是每一個(gè)用 LoadBalancer 暴露的服務(wù)都會(huì)有它自己的 IP 地址,每個(gè)用到的 LoadBalancer 都需要付費(fèi),這將是非常昂貴的。

3.Ingress

有別于以上所有例子,Ingress 事實(shí)上不是一種服務(wù)類型。相反,它處于多個(gè)服務(wù)的前端,扮演著“智能路由”或者集群入口的角色。

你可以用 Ingress 來(lái)做許多不同的事情,各種不同類型的 Ingress 控制器也有不同的能力。

默認(rèn) ingress 控制器是啟動(dòng)一個(gè) HTTP(S) Load Balancer[3]。它允許你基于路徑或者子域名來(lái)路由流量到后端服務(wù)。例如,你可以將任何發(fā)往域名 foo.yourdomain.com 的流量轉(zhuǎn)到 foo 服務(wù),將路徑 yourdomain.com/bar/path 的流量轉(zhuǎn)到 bar 服務(wù)。

基于以上情況,建議各位還是采用Ingress。以下是我基于1.20版本的安裝實(shí)操

步驟1:

下載mandatory.yaml和service-nodeport.yaml,mandatory.yaml主要是安裝nginx-ingress-controller( 具體實(shí)現(xiàn)反向代理及負(fù)載均衡的程序,對(duì)ingress定義的規(guī)則進(jìn)行解析,根據(jù)配置的規(guī)則來(lái)實(shí)現(xiàn)請(qǐng)求轉(zhuǎn)發(fā) )。service-nodeport.yaml主要是負(fù)責(zé)對(duì)外提供服務(wù),如果不需要可以不下載(service-nodeport其實(shí)就是個(gè)簡(jiǎn)單的service服務(wù)需要對(duì)外服務(wù)需要開(kāi)通個(gè)nodePort即可讓外部訪問(wèn)k8s內(nèi)部服務(wù),具體我們后面再講)

下載mandatory.yaml,下載地址是:https://github.com/kubernetes/ingress-nginx/tree/nginx-0.30.0/deploy/static

k8s中ingress的安裝方法

下載完成后我們需要對(duì)mandatory.yaml進(jìn)行簡(jiǎn)單的修改

1、將文件中的rbac.authorization.k8s.io/v1beta1 替換成 rbac.authorization.k8s.io/v1 原因是1.20版本已經(jīng)v1beta1版本已經(jīng)過(guò)期,所以最好是改成v1不然會(huì)告警或報(bào)錯(cuò)。

2、設(shè)置k8s使用主機(jī)網(wǎng)絡(luò)(可選)

這里需要注意的是如果是自己服務(wù)器(非啊里云,騰訊云等云服務(wù)器,配置成 Network 之后是可以不需要?jiǎng)?chuàng)建一個(gè)nodePort的svc, 而是直接在每個(gè)節(jié)點(diǎn)都創(chuàng)建一個(gè)ingress-controller的容器,而且將該容器的網(wǎng)絡(luò)模式設(shè)為hostNetwork。也就是說(shuō)每個(gè)節(jié)點(diǎn)物理機(jī)的80和443端口將會(huì)被ingress-controller中的nginx容器占用。當(dāng)流量通過(guò)80/443端口進(jìn)入時(shí),將直接進(jìn)入到nginx中。而后nginx根據(jù)ingress規(guī)則再將流量轉(zhuǎn)發(fā)到對(duì)應(yīng)的web應(yīng)用容器中。 上面的service-nodeport.yaml文件是可以不下載的),我這邊測(cè)試,所以也設(shè)置成netWork模式

k8s中ingress的安裝方法

3、安裝

    運(yùn)行kubectl apply -f mandatory.yaml

k8s中ingress的安裝方法

出現(xiàn)以下界面表示安裝成功,如果失敗可以kubectl delete -f mandatory.yaml清空已安裝的pod和configmap,然后根據(jù)實(shí)際報(bào)錯(cuò)修改mandatory.yaml再重試

大家留意這張圖,如果hostNetwork設(shè)置為true紅色框框部分顯示的就是你自己的主機(jī)IP(真實(shí)IP),如果不設(shè)置則會(huì)顯示虛擬IP(10.***這種)我因?yàn)槭前±镌品?wù)器所以這里的IP顯示的是啊里云的內(nèi)網(wǎng)IP 172.23.78.148。

k8s中ingress的安裝方法

下載service-nodeport.yaml 地址是:https://github.com/kubernetes/ingress-nginx/tree/nginx-0.30.0/deploy/static/provider/baremetal

k8s中ingress的安裝方法

修改service-nodeport.yaml,因?yàn)槲覀冃枰獠窟M(jìn)行訪問(wèn)以必須要開(kāi)通個(gè)nodePort紅色框框部分就是我們對(duì)外的端口,端口我隨便弄的。

k8s中ingress的安裝方法

安裝service

kubectl apply -f service-nodeport.yaml

k8s中ingress的安裝方法

看到以下信息表示運(yùn)行成功,這里可以看到我們?cè)L問(wèn)30080映射的是內(nèi)部80端口,30443映射的是443端口

我們?cè)跒g覽器上輸入http://{服務(wù)器外網(wǎng)IP}:30080/會(huì)顯示以下界面

k8s中ingress的安裝方法

這表示ingress已經(jīng)成功安裝。

為了看演示效果,我們可以下個(gè)tomcat鏡像來(lái)測(cè)試下

docker search tomcat

k8s中ingress的安裝方法

我們挑選個(gè)tomcat安裝一下

docker pull tomcat

k8s中ingress的安裝方法

編寫tomcat-demo腳本

cat >>~/tomcat-demo.yaml <<EOF
apiVersion: v1
kind: Service
metadata:
  name: tomcat
  namespace: default
spec:
  selector:
    app: tomcat
    release: canary
  ports:
  - name: http
    port: 8080
    targetPort: 8080
  - name: ajp
    port: 8009
    targetPort: 8009
 
---
apiVersion: apps/v1
kind: Deployment
metadata: 
  name: tomcat-deploy
spec:
  replicas: 1
  selector: 
    matchLabels:
      app: tomcat
      release: canary
  template:
    metadata:
      labels:
        app: tomcat
        release: canary
    spec:
      containers:
      - name: tomcat
        image: tomcat:latest
        ports:
        - name: httpd
          containerPort: 8080
        - name: ajp
          containerPort: 8009
EOF

運(yùn)行腳本

kubectl apply -f tomcat-demo.yaml

看到以下界面表示tomcat服務(wù)成功啟動(dòng)

k8s中ingress的安裝方法

然后我們創(chuàng)建個(gè)ingress測(cè)試

cat >>~/tomcat-ingress.yaml <<EOF
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-tomcat
  namespace: default
  annotations: 
    kubernets.io/ingress.class: "nginx"
spec:
  rules:
  - http:
      paths:
      - path: /t1/
        backend:
          serviceName: tomcat
          servicePort: 8080
EOF

運(yùn)行腳本

kubectl apply -f tomcat-ingress.yaml

運(yùn)行kubectl get ingress 看到以下界面表示ingress資源創(chuàng)建成功

k8s中ingress的安裝方法

這時(shí)我們?cè)跒g覽器上輸入http://{服務(wù)器外網(wǎng)IP}:30080/t1/會(huì)顯示以下界面

k8s中ingress的安裝方法

感謝各位的閱讀,以上就是“k8s中ingress的安裝方法”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)k8s中ingress的安裝方法這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

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

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

AI