亚洲视频二区_亚洲欧洲日本天天堂在线观看_日韩一区二区在线观看_中文字幕不卡一区

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.430618.com 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

目錄
  • 一、什么是Ingress
  • 二、Ingress 工作機制
  • 三、Ingress 核心概念
  • 四、Ingress 工作原理
  • 五、Ingress 使用
    • 搭建 Ingress 環境
      • 1、獲取 ingress-nginx
      • 2、創建 ingress-nginx
    • 部署兩組 service
      • 創建tomcat-nginx.yaml
    • 配置Http訪問代理
      • 如何通過外網訪問呢?
    • 配置Https訪問代理

    一、什么是Ingress

    在上一篇關于k8s之service的使用一篇中提到,Service對集群之外暴露服務的主要方式有兩種,NotePort和LoadBalancer,但這兩種方式,都有一定的缺點,具體來說:

    • NodePort 會占用很多集群機器的端口,當集群服務變多的時候,過多的端口會給k8s的運維人員帶來諸多的不便;
    • 而LB的缺點是每個service需要一個LB,不僅浪費而且麻煩,并且需要kubernetes之外設備的支持;

    基于這種現狀,k8s提供了Ingress這種資源對象,Ingress只需要一個NodePort或者一個LB就可以滿足暴露多個Service的需求;

    二、Ingress 工作機制

     Ingress 的工作機制可參考下圖進行理解;

    k8s?Ingress使用詳解(云原生kubernetes)

    實際上,Ingress相當于一個7層的負載均衡器,可以理解為kubernetes對反向代理的一個抽象,它的工作原理類似于Nginx;

    或者可以理解為:在Ingress里建立了諸多的映射規則,Ingress Controller通過監聽這些配置規則并轉化成Nginx的反向代理配置 , 然后對外部提供服務;

    三、Ingress 核心概念

    關于Ingress,有下面兩個概念需要重點理解

    • ingress:kubernetes中的一個對象,作用是定義請求如何轉發到service的規則;
    • ingress controller:具體實現反向代理及負載均衡的程序,對ingress定義的規則進行解析,根據配置的規則來實現請求轉發,實現方式有很多,比如Nginx, Contour, Haproxy等;

    四、Ingress 工作原理

    類比Nginx來說,Ingress工作原理如下

    • 編寫Ingress規則,說明哪個域名對應kubernetes集群中哪個Service;
    • Ingressnen控制器動態感知Ingress服務規則的變化,然后生成一段對應的Nginx反向代理配置;
    • Ingress控制器會將生成的Nginx配置寫入到一個運行著的Nginx服務中,并動態更新;

    到此為止,不難發現,Ingress 其實真正在工作的時候就像是充當一個Nginx在使用,內部配置了用戶定義的請求轉發規則;

    整個工作原理可以參照下圖進行理解

    k8s?Ingress使用詳解(云原生kubernetes)

    五、Ingress 使用

    搭建 Ingress 環境

    1、獲取 ingress-nginx

    獲取ingress-nginx,本次案例使用的是0.30版本

    在當前目錄下創建一個ingress-controller目錄

    mkdir ingress-controller

    進入目錄,下載兩個yaml文件,可以通過wget的方式

    wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.30.0/deploy/static/mandatory.yaml
    wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.30.0/deploy/static/provider/baremetal/service-nodeport.yaml
     
    #如果仍然下載不下來,也可以考慮下載碼云上的
    wget https://gitee.com/mirrors/ingress-nginx/raw/nginx-0.30.0/deploy/static/mandatory.yaml

    或者進入github直接手動復制配置內容到本地的yaml文件中

    mandatory.yaml   service-nodeport.yaml

    注意,下載下來之后, 修改mandatory.yaml文件中的倉庫,否則拉取不到

    quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.30.0

    替換為

    quay-mirror.qiniu.com/kubernetes-ingress-controller/nginx-ingress-controller:0.30.0

    k8s?Ingress使用詳解(云原生kubernetes)

    2、創建 ingress-nginx

    kubectl apply -f ./

    執行完成后,可以看到創建了很多東西

    k8s?Ingress使用詳解(云原生kubernetes)

    執行完成后,查看Pod和Service,可以看到下面這兩個信息,一個Pod(nginx-ingress-controller),一個Service(NodePort);

    kubectl apply -f  mandatory.yaml
    kubectl apply -f service-nodeport.yaml 

    k8s?Ingress使用詳解(云原生kubernetes)

    部署兩組 service

    按照下圖所示,我們將部署兩組Pod,一組為nginx,一組為tomcat

    k8s?Ingress使用詳解(云原生kubernetes)

    創建tomcat-nginx.yaml

    配置內容如下

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deployment
      namespace: default
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: nginx-pod
      template:
        metadata:
          labels:
            app: nginx-pod
        spec:
          containers:
          - name: nginx
            image: nginx:1.17.1
            ports:
            - containerPort: 80
     
    ---
     
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: tomcat-deployment
      namespace: default
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: tomcat-pod
      template:
        metadata:
          labels:
            app: tomcat-pod
        spec:
          containers:
          - name: tomcat
            image: tomcat:8.5-jre10-slim
            ports:
            - containerPort: 8080
     
    ---
     
    apiVersion: v1
    kind: Service
    metadata:
      name: nginx-service
      namespace: default
    spec:
      selector:
        app: nginx-pod
      clusterIP: None
      type: ClusterIP
      ports:
      - port: 80
        targetPort: 80
     
    ---
     
    apiVersion: v1
    kind: Service
    metadata:
      name: tomcat-service
      namespace: default
    spec:
      selector:
        app: tomcat-pod
      clusterIP: None
      type: ClusterIP
      ports:
      - port: 8080
        targetPort: 8080
    

    使用下面的命令執行Pod的創建

    kubectl create -f tomcat-nginx.yaml

    k8s?Ingress使用詳解(云原生kubernetes)

    創建成功后,可以檢查下Pod的狀況,可以看到3個nginx,3個tomcat對應的Pod成功創建和運行起來了;

    k8s?Ingress使用詳解(云原生kubernetes)

     此時,再查看service,可以看到nginx和tomcat對應的兩個service;

    k8s?Ingress使用詳解(云原生kubernetes)

    到這里,我們就按照部署圖中的模型準備完成,接下來就需要通過Ingress相關的配置登場了;

    配置Http訪問代理

    在當前目錄下,創建ingress-http.yaml,配置內容如下:

    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: ingress-http
      namespace: default
    spec:
      rules:
      - host: nginx.congge.com
        http:
          paths:
          - path: /
            backend:
              serviceName: nginx-service
              servicePort: 80
      - host: tomcat.congge.com
        http:
          paths:
          - path: /
            backend:
              serviceName: tomcat-service
              servicePort: 8080

    使用下面的命令創建并查看

    kubectl create -f ingress-http.yaml

    kubectl get ing ingress-http -n default

    kubectl describe ing ingress-http -n default

    k8s?Ingress使用詳解(云原生kubernetes)

    也可以通過describe查看Ingress配置規則的詳細信息; 

    k8s?Ingress使用詳解(云原生kubernetes)

    該規則解釋來說就是:

    • 當訪問: nginx.congge.com的時候,將由nginx-service處理,其背后處理的Pod分別為括號內分配的IP:地址對應的服務;
    • 當訪問:tomcat … ,也是如此理解

    如何通過外網訪問呢?

    首先,我們查看下上面通過Ingres-controller創建時的service信息,下圖可以看到,這里有一個NodePort類型的service,分配的對外端口是30337;

    k8s?Ingress使用詳解(云原生kubernetes)

    所以,外網訪問的完整地址是,前提是當前的這個域名要能正確使用;

    http://nginx.congge.com:32599
    http://tomcat.congge.com:30337

    配置Https訪問代理

    https的配置和http配置文件差不多,只是在使用https這種方式下,需要提前創建好響應的證書;

    創建證書

    # 生成證書openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/C=CN/ST=BJ/L=BJ/O=nginx/CN=congge.com"# 創建密鑰kubectl create secret tls tls-secret --key tls.key --cert tls.crt

    k8s?Ingress使用詳解(云原生kubernetes)

    在當前目錄下創建ingress-https.yaml配置文件,配置內容如下:

    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: ingress-https
      namespace: default
    spec:
      tls:
        - hosts:
          - nginx.congge.com
          - tomcat.congge.com
          secretName: tls-secret # 指定秘鑰
      rules:
      - host: nginx.congge.com
        http:
          paths:
          - path: /
            backend:
              serviceName: nginx-service
              servicePort: 80
      - host: tomcat.congge.com
        http:
          paths:
          - path: /
            backend:
              serviceName: tomcat-service
              servicePort: 8080

    使用下面的命令創建

    kubectl create -f ingress-https.yaml

    k8s?Ingress使用詳解(云原生kubernetes)

    或者通過describe命令查看下相關的配置規則,與上面http不同的是,這里會多出一個TLS,可以看到,這個TLS所要保護的域名,正是上面配置的那兩個域名;

    k8s?Ingress使用詳解(云原生kubernetes)

    在通過外網訪問之前,我們再次查看下對外暴露的端口號,由于是https,所以應該訪問的是32559;

    k8s?Ingress使用詳解(云原生kubernetes)

    再次訪問時,地址如下

    https://nginx.congge.com:32599
    https://tomcat.congge.com:30337

    分享到:
    標簽:Ingress K8S Kubernetes 服務器 詳解
    用戶無頭像

    網友整理

    注冊時間:

    網站:5 個   小程序:0 個  文章:12 篇

    • 51998

      網站

    • 12

      小程序

    • 1030137

      文章

    • 747

      會員

    趕快注冊賬號,推廣您的網站吧!
    最新入駐小程序

    數獨大挑戰2018-06-03

    數獨一種數學游戲,玩家需要根據9

    答題星2018-06-03

    您可以通過答題星輕松地創建試卷

    全階人生考試2018-06-03

    各種考試題,題庫,初中,高中,大學四六

    運動步數有氧達人2018-06-03

    記錄運動步數,積累氧氣值。還可偷

    每日養生app2018-06-03

    每日養生,天天健康

    體育訓練成績評定2018-06-03

    通用課目體育訓練成績評定