<input id="ohw05"></input>
  • <table id="ohw05"><menu id="ohw05"></menu></table>
  • <var id="ohw05"></var>
  • <code id="ohw05"><cite id="ohw05"></cite></code>
    <label id="ohw05"></label>
    <var id="ohw05"></var>
  • kubernetes之ingress探索實踐

    3、Ingress實踐

    3.1、什么是Ingress?

    在ingress之前,我們想要訪問k8s集群中的pod服務時,是通過部署一個service,將service的type設置為NodePort或者將設置為LoadBalance,這樣可以在物理機上開辟出一個物理端口給到對應的service,service再通過dns解析出具體要路由的Pod服務,從而對Pod服務進行服務轉發訪問。
    但是在生產環境,一般是會有幾百上千個pod服務,意味著需要有幾百上千個service對象,那么多service對象對外提供訪問服務,都需要開辟端口,需要面臨下面幾個問題:
    1、這些service該怎么去管理?
    2、這么多端口管理,端口的建立需要消耗資源,降低性能。
    3、訪問困難,這么多service,到底應該訪問哪個service?
    因此kubernetes提供了Ingress方案,Ingress方案為整個集群提供了統一的入口,相當于微服務中的網關(gateway/nginx),所有的service不再對外提供接口方案,所有的請求都經過ingress進行路由轉發。
    Ingress可以理解為Service 的Service , 相關于是一個網關入口,通過Ingress統一實現請求的分發,根據定義的路由規則,把請求分發給下游服務。
    image.png
    有了Ingress服務后,只需要對外暴露一個端口即可,其它所有的服務都只需要在內網訪問即可。

    3.2、Ingress原理

    官網的原圖:https://kubernetes.io/zh-cn/docs/concepts/services-networking/ingress/
    image.png
    Ingress的作用跟Nginx有點像,但這里之所以不用Nginx,是因為每個Pod服務都是動態生成的,以為Pod服務域名、IP都可能會發生變化,所以沒辦法直接用Nginx.
    而Ingress就像是一個提供動態的nginx。通過將要路由的服務轉化成一個規則,通過對一系列的規則進行監聽轉發。
    image.png

    3.3、Ingress實戰

    3.3.1、Ingreess安裝

    可以參考https://github.com/kubernetes/ingress-nginx/tree/nginx-0.30.0
    image.png
    按順序部署上圖中的幾個文件服務即可。
    再給ingress開辟一個物理端口:

    apiVersion: v1
    kind: Service
    metadata:
      name: ingress-nginx
      namespace: ingress-nginx
      labels:
        app.kubernetes.io/name: ingress-nginx
        app.kubernetes.io/part-of: ingress-nginx
    spec:
      type: NodePort
      ports:
        - name: http
          port: 80
          targetPort: 80
          nodePort: 30080
          protocol: TCP
        - name: https
          port: 443
          targetPort: 443
          nodePort: 30443
          protocol: TCP
      selector:
        app.kubernetes.io/name: ingress-nginx
        app.kubernetes.io/part-of: ingress-nginx
    

    執行:kubectl apply -f ingress-servce.yaml

    3.3.2、入門案例

    目標:實現ingress轉發規則定義,實現從Ingress定義的規則把請求轉發到服務。
    1)定義一個后端服務:

    apiVersion: v1
    kind: Service
    metadata:
      name: nginx
      namespace: default
    spec:
      selector:
        app: nginx
      ports:
      - port: 80
        targetPort: 80
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx
      namespace: default
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: harbor.hyz.com/library/mynginx:v1
            ports:
            - containerPort: 80
    
    

    2)定義Ingress轉發規則:

    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: nginx
      namespace: default
      labels:
        app: nginx
    spec:
      rules:
      - host: ingress.huangyz.com
        http:
          paths:
          - backend:
              serviceName: nginx
              servicePort: 80
    

    通過域名訪問:
    image.png
    具體的流轉對應流程:
    image.png
    隨機進入某一個nginx-ingress-controller服務,查看根據規則動態生成的nginx路由配置:
    image.png

    3.3.3、多個域名(多個服務)

    1)部署nginx服務(已部署),部署tomcat服務

    apiVersion: v1
    kind: Service
    metadata:
      name: tomcat
      namespace: default
    spec:
      selector:
        app: tomcat
      ports:
      - port: 8080
        targetPort: 8080
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: tomcat
      namespace: default
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: tomcat
      template:
        metadata:
          labels:
            app: tomcat
        spec:
          containers:
          - name: tomcat
            image: harbor.hyz.com/library/mytomcat:v1
            ports:
            - containerPort: 8080
    
    1. 部署Ingress規則
    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: nginx
      namespace: default
      labels:
        app: nginx
    spec:
      rules:
      - host: ingress1.huangyz.com
        http:
          paths:
            - path: /
              backend:
                serviceName: nginx
                servicePort: 80
      - host: ingress2.huangyz.com
        http:
          paths:
            - path: /
              backend:
                serviceName: tomcat
                servicePort: 8080
    

    訪問:http://ingress1.huangyz.com:30080,http://ingress2.huangyz.com:30080:分別訪問nginx,tomcat的應用頁面。
    image.png
    image.png
    查看動態生成的配置,多了tomcat一項的路由配置:
    image.png

    3.3.4、一個域名(多個服務)

    部署nginx,tomcat服務(已部署)
    部署ingress規則:

    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: nginx
      namespace: default
      labels:
        app: nginx
      annotations:
        nginx.ingress.kubernetes.io/rewrite-target: /  # 請求重寫,重寫定位到跟路徑下訪問服務
    spec:
      rules:
      - host: ingress.huangyz.com
        http:
          paths:
            - path: /nginx  # 請求是/nginx/** 都會被攔截,請求發送給nginx服務
              backend:
                serviceName: nginx
                servicePort: 80
            - path: /tomcat
              backend:
                serviceName: tomcat
                servicePort: 8080
    

    注意
    path : /nginx 請求必須滿足:ingress.huangyz.com/nginx 必須要求后端服務也有與之對應的請求;
    @GetMapping(“/nginx”)
    Path: / tomcat
    @GetMapping(“/tomcat”)
    image.png

    3.3.5、Ingress重定向

    我們把nginx的請求重定向到百度首頁:

    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: nginx
      namespace: default
      labels:
        app: nginx
      annotations:
        nginx.ingress.kubernetes.io/permanent-redirect: https://www.baidu.com
    spec:
      rules:
      - host: ingress.huangyz.com
        http:
          paths:
          - backend:
              serviceName: nginx
              servicePort: 80
    

    3.3.6、總結

    這里只是試驗了幾種情況,驗證了基本都是nginx的功能,只不過實現了nginx的路由規則動態配置化了。感興趣的童鞋也可以根據上面的幾種情況,在自己的環境上進行一個驗證。

    posted @ 2022-07-01 10:27  尋找的路上  閱讀(209)  評論(1編輯  收藏  舉報
    国产美女a做受大片观看