Ingress 統一的訪問入口(ingress-nginx)(一)

本次實踐的主要目的就是將入口統一,不再通過 LoadBalancer 等方式將端口暴露出來,而是使用 Ingress 提供的反向代理負載均衡功能作爲我們的唯一入口。

kubernetes 版本爲1.16.0

部署tomcat

部署 Tomcat 但僅允許在內網訪問,我們要通過 Ingress 提供的反向代理功能路由到 Tomcat 之上

apiVersion: apps/v1
kind: Deployment
metadata:
  name: tomcat-app
spec:
  selector:
    matchLabels:
      app: tomcat
  replicas: 2
  template:
    metadata:
      labels:
        app: tomcat
    spec:
      containers:
      - name: tomcat
        image: tomcat:8.5.47
        ports:
        # 容器的默認端口
        - containerPort: 8080


---
apiVersion: v1
kind: Service
metadata:
  name: tomcat-http
spec:
  ports:
      # service 的端口
    - port: 8081
      # 容器默認端口,也就是將servcie8081 映射到 pods8080
      targetPort: 8080
  # ClusterIP, NodePort, LoadBalancer
  type: ClusterIP
  selector:
    app: tomcat

安裝Nginx Ingress Controller

Ingress Controller 有許多種,我們選擇最熟悉的 Nginx 來處理請求,其它可以參考

mkdir -p /usr/local/kubernetes/yaml/ingress
cd /usr/local/kubernetes/yaml/ingress

# 下載配置文件
wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.27.1/deploy/static/mandatory.yaml

修改配置文件vim mandatory.yaml,找到配置如下位置 (搜索 serviceAccountName) 在下面增加一句 hostNetwork: true

191 kind: Deployment
192 metadata:
193   name: nginx-ingress-controller
194   namespace: ingress-nginx
195   labels:
196     app.kubernetes.io/name: ingress-nginx
197     app.kubernetes.io/part-of: ingress-nginx
198 spec:
199   replicas: 1 # 建立改成多個.如 3
200   selector:
201     matchLabels:
202       app.kubernetes.io/name: ingress-nginx
203       app.kubernetes.io/part-of: ingress-nginx
204   template:
205     metadata:
206       labels:
207         app.kubernetes.io/name: ingress-nginx
208         app.kubernetes.io/part-of: ingress-nginx
209       annotations:
210         prometheus.io/port: "10254"
211         prometheus.io/scrape: "true"
212     spec:
213       # wait up to five minutes for the drain of connections
214       terminationGracePeriodSeconds: 300
215       serviceAccountName: nginx-ingress-serviceaccount
		 # 增加 hostNetwork: true,意思是開啓主機網絡模式,暴露 Nginx 服務端口 80
216       hostNetwork: true
217       nodeSelector:
218         kubernetes.io/os: linux
219       containers:
220         - name: nginx-ingress-controller
221           image: quay.io/kubernetes-ingress-controller/nginx-ingress-controller:master
222           args:
223             - /nginx-ingress-controller
224             - --configmap=$(POD_NAMESPACE)/nginx-configuration
225             - --tcp-services-configmap=$(POD_NAMESPACE)/tcp-services
226             - --udp-services-configmap=$(POD_NAMESPACE)/udp-services
227             - --publish-service=$(POD_NAMESPACE)/ingress-nginx
228             - --annotations-prefix=nginx.ingress.kubernetes.io
				'''''''''

部署Ingress(即網關)

cd /usr/local/kubernetes/yaml/ingress
vim ingress.yml

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: nginx-web
  annotations:
    # 指定 Ingress Controller 的類型
    kubernetes.io/ingress.class: "nginx"
    # 指定我們的 rules 的 path 可以使用正則表達式
    nginx.ingress.kubernetes.io/use-regex: "true"
    # 連接超時時間,默認爲 5s
    nginx.ingress.kubernetes.io/proxy-connect-timeout: "600"
    # 後端服務器迴轉數據超時時間,默認爲 60s
    nginx.ingress.kubernetes.io/proxy-send-timeout: "600"
    # 後端服務器響應超時時間,默認爲 60s
    nginx.ingress.kubernetes.io/proxy-read-timeout: "600"
    # 客戶端上傳文件,最大大小,默認爲 20m
    nginx.ingress.kubernetes.io/proxy-body-size: "10m"
    # URL 重寫
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  # 路由規則
  rules:
  # 主機名,只能是域名,修改爲你自己的
  - host: k8s.test.com
    http:
      paths:
      - path:
        backend:
          # 後臺部署的 Service Name,與上面部署的 Tomcat 對應
          serviceName: tomcat-http
          # 後臺部署的 Service Port,與上面部署的 Tomcat 對應
          servicePort: 8081

檢查部署效果

請各位大大點擊我,閱讀下一篇哦😄

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章