第七章 helm 輕鬆完爆 nginx-ingress

注意:可在我 百度網盤 直接下載 helm、minio 以及修改好的 gitlab 資源包linux

本系列文章:nginx

第一章:helm 一分鐘輕鬆完爆git

第二章:helm 輕鬆完爆公共倉庫web

第三章:helm 輕鬆完爆私有倉庫windows

第四章:helm 輕鬆完爆 chart後端

第五章:helm 輕鬆完爆 releaseapi

第六章:helm 輕鬆完爆 gitlab瀏覽器

第七章:helm 輕鬆完爆 nginx-ingresstomcat

目錄app

1 版本說明

2 介紹 nginx-ingress 

3 下載 nginx-ingress 

4 配置 nginx-ingress 

5 安裝 nginx-ingress 

    5.1 修改 deployment version

    5.2 添加 deployment selector

6 nginx-ingress 組成

7 建立 tomcat 微服務

8 建立 ingress 

9 訪問 tomcat 

    9.1 配置 hosts

    9.2 肯定 nginx-ingress 的服務端口


1 版本說明

        k8s:v1.16.3;helm:v3.0.0;nginx-ingress:0.9.5。


2 介紹 nginx-ingress 

        nginx-ingress 是 k8s 入口,負責將客戶端請求路由到 k8s 內部微服務上。若是說 k8s 是一個監獄,那麼 nginx-ingress 就是監獄大門。


3 下載 nginx-ingress 

        選擇阿里雲的 helm chart 倉庫。

spacer.gif

clipboard1.png

        下載 nginx-ingress:

helm pull stable/nginx-ingress


4 配置 nginx-ingress 

        修改 values.yaml 文件:

1) hostNetwork: false 改成 true

2)type: LoadBalancer 改成 NodePort

3)rbac:

            create: false 改成 true


5 安裝 nginx-ingress 

## 第一個 nginx-ingress 是 release 名。第二個 nginx-ingress 是 chart 解壓目錄。

helm install nginx-ingress nginx-ingress

5.1 修改 deployment version

Error: unable to build kubernetes objects from release manifest: unable to recognize "": no matches for kind "Deployment" in version "extensions/v1beta1"

        若是有如上報錯,須要修改 nginx-ingress deployment 文件的 apiVersion。

grep -irl "extensions/v1beta1" nginx-ingress | grep deploy | xargs sed -i 's#extensions/v1beta1#apps/v1#g'

5.2 添加 deployment selector

Error: unable to build kubernetes objects from release manifest: error validating "": error validating data: ValidationError(Deployment.spec): missing required field "selector" in io.k8s.api.apps.v1.DeploymentSpec

         若是有如上報錯,須要在 deployment 文件添加 selector:

vi nginx-ingress/templates/controller-deployment.yamlspacer.gif

clipboard4.png

vi nginx-ingress/templates/default-backend-deployment.yaml

clipboard5.png

        修改後再次執行,安裝成功:

clipboard6.png


6 nginx-ingress 組成

kubectl get pods -n nginx-ingress

clipboard7.pngspacer.gif        由上圖可知,nginx-ingress 包括 2 個組件:

        1)nginx-ingress-controller:nginx-ingress 控制器,負責 nginx-ingress pod 的生命週期管理。nginx-ingress pod 本質就是 nginx。用來處理請求路由等功能。這也是爲何稱 nginx-ingress pod 是集羣流量入口的緣故。

        2)nginx-ingress-default-backend:默認後端。若是你沒有配置路由或路由配錯了,將會由此 pod 兜底,通常會顯示 404 給你。


7 建立 tomcat 微服務

        nginx-ingress已經建立完畢,至關於nginx已經就緒。下面咱們在k8s集羣中建立一個名爲 myweb-svc 的 tomcat 服務。

## 啓動並暴露 tomcat 服務

kubectl run myweb --image=tomcat

kubectl expose deployment myweb --port=8080 --name=myweb-svc


8 建立 ingress 

        剛建立完 nginx-ingress,如今又建立 ingress。是否是會有點迷,到底二者的區別是什麼?你能夠這麼來理解,nginx-ingress 是 nginx,而 ingress 則至關於 nginx 裏面的一段配置信息。例以下面的 ingress 文件,就是建立從 nginx 路由到 tomcat 的配置。

        ingress 文件以下:

apiVersion: extensions/v1beta1

kind: Ingress

metadata:

 name: server-jiuxi-ingress

 annotations:

   kubernetes.io/ingress.class: "nginx"

spec:

 rules:

 - host: zcy.jiuxi.org

   http:

     paths: /

     - path:

       backend:

         serviceName: myweb-svc

         servicePort: 8080

        翻譯成 nginx 的配置就是:

server {

    server_name zcy.jiuxi.org

    location / {

        proxy_pass http://myweb-svc:8080

    }

}

        執行下列語句建立 ingress,生成 nginx 到 tomcat 的路由規則:

kubectl apply -f server-jiuxi-ingress.yaml

clipboard8.png


9 訪問 tomcat 

        上面建立了 nginx-ingress(nginx)、又建立了 tomcat 微服務、又生成了從 nginx 路由到 tomcat 的規則(ingress)。那麼下一步咱們就能夠經過設置好的 ingress 來訪問 tomcat 微服務了。可是訪問前,還須要再作2點配置。

9.1 配置 hosts

        由於 ingress 中設置了域名 zcy.jiuxi.org,因此須要在瀏覽器所在的機器上設置 dns。個人IP是10.110.101.98。我的根據實際狀況修改。

## windows 用戶。編輯 C:\Windows\System32\drivers\etc\hosts 文件

## linux   用戶。編輯 /etc/hosts 文件

spacer.gifclipboard9.png

9.2 肯定 nginx-ingress 的服務端口

kubectl get svc

        我這裏是30742注意不是80,也不是8080。spacer.gifclipboard10.png

        瀏覽器中輸入 http://zcy.jiuxi.com:30742。

clipboard11.png

        自此,helm 輕鬆完爆了 nginx-ingress。

相關文章
相關標籤/搜索