您好,登錄后才能下訂單哦!
這篇文章主要講解了“k8s中ingress的安裝方法”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“k8s中ingress的安裝方法”吧!
在Kubernetes中,服務和Pod的IP地址僅可以在集群網絡內部使用,對于集群外的應用是不可見的。為了使外部的應用能夠訪問集群內的服務,在Kubernetes 目前 提供了以下幾種方案:
1.NodePort
NodePort 服務是暴露服務的最原始方式。 顧名思義,NodePort 會在所有節點(VM)上打開一個特定的端口,并且發送到此端口的任何流量都將轉發到該服務。 這種方式主要有以下缺點:
每個端口只能有一個服務
默認您只能使用端口30000-32767
基于以上原因,我不建議在生產環境上用這種方式暴露服務。如果你運行的服務不要求一直可用,或者對成本比較敏感,你可以使用這種方法。這樣的應用的最佳例子是 demo 應用,或者某些臨時應用。
2.LoadBalancer
LoadBalancer 服務是暴露服務到 internet 的標準方式。這種方式會啟動一個 Network Load Balancer,它將給你一個單獨的 IP 地址,轉發所有流量到你的服務。
如果你想要直接暴露服務,這就是默認方式。所有通往你指定的端口的流量都會被轉發到對應的服務。它沒有過濾條件,沒有路由等。這意味著你幾乎可以發送任何種類的流量到該服務,像 HTTP,TCP,UDP,Websocket,gRPC 或其它任意種類。
這個方式的最大缺點是每一個用 LoadBalancer 暴露的服務都會有它自己的 IP 地址,每個用到的 LoadBalancer 都需要付費,這將是非常昂貴的。
3.Ingress
有別于以上所有例子,Ingress 事實上不是一種服務類型。相反,它處于多個服務的前端,扮演著“智能路由”或者集群入口的角色。
你可以用 Ingress 來做許多不同的事情,各種不同類型的 Ingress 控制器也有不同的能力。
默認 ingress 控制器是啟動一個 HTTP(S) Load Balancer[3]。它允許你基于路徑或者子域名來路由流量到后端服務。例如,你可以將任何發往域名 foo.yourdomain.com 的流量轉到 foo 服務,將路徑 yourdomain.com/bar/path 的流量轉到 bar 服務。
基于以上情況,建議各位還是采用Ingress。以下是我基于1.20版本的安裝實操
步驟1:
下載mandatory.yaml和service-nodeport.yaml,mandatory.yaml主要是安裝nginx-ingress-controller( 具體實現反向代理及負載均衡的程序,對ingress定義的規則進行解析,根據配置的規則來實現請求轉發 )。service-nodeport.yaml主要是負責對外提供服務,如果不需要可以不下載(service-nodeport其實就是個簡單的service服務需要對外服務需要開通個nodePort即可讓外部訪問k8s內部服務,具體我們后面再講)
下載mandatory.yaml,下載地址是:https://github.com/kubernetes/ingress-nginx/tree/nginx-0.30.0/deploy/static
下載完成后我們需要對mandatory.yaml進行簡單的修改
1、將文件中的rbac.authorization.k8s.io/v1beta1 替換成 rbac.authorization.k8s.io/v1 原因是1.20版本已經v1beta1版本已經過期,所以最好是改成v1不然會告警或報錯。
2、設置k8s使用主機網絡(可選)
這里需要注意的是如果是自己服務器(非啊里云,騰訊云等云服務器,配置成 Network 之后是可以不需要創建一個nodePort的svc, 而是直接在每個節點都創建一個ingress-controller的容器,而且將該容器的網絡模式設為hostNetwork。也就是說每個節點物理機的80和443端口將會被ingress-controller中的nginx容器占用。當流量通過80/443端口進入時,將直接進入到nginx中。而后nginx根據ingress規則再將流量轉發到對應的web應用容器中。 上面的service-nodeport.yaml文件是可以不下載的),我這邊測試,所以也設置成netWork模式
3、安裝
運行kubectl apply -f mandatory.yaml
出現以下界面表示安裝成功,如果失敗可以kubectl delete -f mandatory.yaml清空已安裝的pod和configmap,然后根據實際報錯修改mandatory.yaml再重試
大家留意這張圖,如果hostNetwork設置為true紅色框框部分顯示的就是你自己的主機IP(真實IP),如果不設置則會顯示虛擬IP(10.***這種)我因為是啊里云服務器所以這里的IP顯示的是啊里云的內網IP 172.23.78.148。
下載service-nodeport.yaml 地址是:https://github.com/kubernetes/ingress-nginx/tree/nginx-0.30.0/deploy/static/provider/baremetal
修改service-nodeport.yaml,因為我們需要外部進行訪問以必須要開通個nodePort紅色框框部分就是我們對外的端口,端口我隨便弄的。
安裝service
kubectl apply -f service-nodeport.yaml
看到以下信息表示運行成功,這里可以看到我們訪問30080映射的是內部80端口,30443映射的是443端口
我們在瀏覽器上輸入http://{服務器外網IP}:30080/會顯示以下界面
這表示ingress已經成功安裝。
為了看演示效果,我們可以下個tomcat鏡像來測試下
docker search tomcat
我們挑選個tomcat安裝一下
docker pull tomcat
編寫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
運行腳本
kubectl apply -f tomcat-demo.yaml
看到以下界面表示tomcat服務成功啟動
然后我們創建個ingress測試
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
運行腳本
kubectl apply -f tomcat-ingress.yaml
運行kubectl get ingress 看到以下界面表示ingress資源創建成功
這時我們在瀏覽器上輸入http://{服務器外網IP}:30080/t1/會顯示以下界面
感謝各位的閱讀,以上就是“k8s中ingress的安裝方法”的內容了,經過本文的學習后,相信大家對k8s中ingress的安裝方法這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。