Kubernetes-Ingress

1 介紹

1.1 概念

  Ingress意爲進入或進入的行爲;進入的權利;進入的手段或地點;入口。
  Ingress支持L7(網絡第七層,HTTP/HTTPS)負載均衡。api

1.2 Ingress的需求

  每一個LoadBalancer服務都須要本身的負載均衡器,以及獨有的公有IP地址,而Ingress只須要一個公網IP就能爲許多服務提供訪問,當客戶端向Ingress發送HTTP請求時,Ingress會根據請求的主機名和路徑決定請求轉發到的服務。服務器

1.3 Ingress暴露服務

Ingress暴露服務
只有Ingress控制器在集羣中運行,Ingress資源才能正常工做。網絡

2 Ingress使用

2.1 建立Ingress資源

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress_name
spec:
  rules:
  - host: ingress.example.com
    http:
      paths:
      - path: /
         backend:
           serviceName: service_name
           servicePort: 80

$ kubectl create -f xxx.yaml負載均衡

2.2 查詢

$ kubectl get ingresses
get ingresses
其中,ADDRESS爲服務暴露出來的IP地址。操作系統

3 Ingress工做原理

經過Ingress訪問pod

1)客戶端首先對ingress.example.com執行DNS查找;
2)DNS服務器(或本地操做系統)返回Ingress控制器的IP;
3)客戶端向Ingress控制器發送HTTP請求,並在Host頭中指定ingress.example.com;
4)控制器從該頭部肯定客戶端嘗試訪問哪一個服務,經過與該服務關聯的Endpoint對象查看pod IP;
5)將客戶端的請求轉發給其中一個pod。code

4 服務映射方式

4.1 將不一樣的服務映射到相同主機的不一樣路徑

...
  - host: service_name.example.com
    http:
      paths: 
      - path: /service_path1
        backend: 
          serviceName: service_name1
          servicePort: 80
      - path: /service_path2
        backend: 
          serviceName: service_name2
          servicePort: 80

  對service_name.example.com/service_path1的請求轉發到service_name1服務上;service_name.example.com/service_path2的請求轉發到service_name2服務上。
  請求將發送到了兩個不一樣的服務上,客戶端能夠經過一個IP地址訪問兩種不一樣的服務。對象

4.2 將不一樣的服務映射到不一樣的主機上

...
spec:
  rules:
  - host: service_name1.example.com
    http:
      paths:
      - path: /
        backend:
          serviceName: service_name1
          servicePort: 80
  - host: service_name2.example.com
    http:
      paths:
      - path: /
        backend:
          serviceName: service_name2
          servicePort: 80

  對service_name1.example.com的請求轉發至service_name1服務上;對service_name2.example.com的請求轉發至service_name2服務上;
  根據請求中的Host頭,控制器收到的請求將被轉發到service_name1service_name2服務,DNS須要將service_name1.example.comservice_name2.example.com域名指向Ingress控制器和IP地址。blog

本站公眾號
   歡迎關注本站公眾號,獲取更多信息