kubernetes ingress(一) 簡介


背景:

  kubernetes集群內部有三種方式暴露服務:nodeport,loadbalancer,ingress,其中loadbalancer需要雲廠商提供對應公網負載均衡,維護成本,費用高。

采用nodeport這種方式的弊端:

    1、開通過多端口,對主機安全性存在一定風險(內網環境,問題不大),多端口的管理過於復雜,混亂

    2、nginx upstream配置nodeport,當后端服務出現異常,探針未及時檢測到時,有可能因為nginx 的健康檢測機制,導致所有服務都被摘除。

  對於ingress的調研,分為兩部分。一部分是ingress,一部分是ingress controller,

  ingress 本身是kubernetes 的一種資源。用於描述host(域名),url,header 與后端服務的對應路由關系,例如,可以在ingress 中定義,www.qyd.com 這個域名/book的url 路由到qingyidai這個命名空間中的book服務。

  ingress controller 從功能上也可以分為兩點:

    1、 動態的與apiserver交互,獲取kubernetes集群中ingress資源的動態,並應用為自身的配置。

    2、為服務提供路由功能,及其他附加功能(SSL等)

Ingress Controller是一個統稱,並不是只有一個,有如下這些:

•Ingress NGINX: Kubernetes 官方維護的方案,也是本次安裝使用的 Controller。

•F5 BIG-IP Controller: F5 所開發的 Controller,它能夠讓管理員通過 CLI 或 API 讓 Kubernetes 與 OpenShift 管理 F5 BIG-IP 設備。

•Ingress Kong: 著名的開源 API Gateway 方案所維護的 Kubernetes Ingress Controller。

•Traefik: 是一套開源的 HTTP 反向代理與負載均衡器,而它也支援了 Ingress

•Kong: 開源的api網關,由lua 和openrestry 集成。

從上邊我們看到,ingress 只是一種路由規則。只是在集群中部署ingress 是沒有意義的。 我們需要ingress-controller實時與apiserver交互。獲取集群中ingress資源的變化。並應用為自身的配置。同時。ingress-controller有很多種。nginx,traefik,kong。。。每一個ingress-controller獲取到ingress 的路由配置,去解析的方式也是不同的。例如。如果我們想將所有的html路由到后端的static服務。 那么在traefik中ingress 的配置如下:

spec:
rules:

  • host: traefik-test.qingyidai.com
    http:
    paths:
    • backend:
      serviceName: static
      servicePort: 80
      path: /{path:.*}.html

而使用nginx 作為ingress-controller 則需要在ingress 如下配置。
metadata:
name: test-ingress-3
annotations:
nginx.ingress.kubernetes.io/use-regex: "true"
spec:
rules:

  • host: traefik-test.qingyidai.com
    http:
    paths:
    • backend:
      serviceName: static
      servicePort: 80
      path: /.*.html

可以看到 traefik 在匹配前綴的時候用到了go 的正則語法。配置中的path沒有實際意義,但是不能為空。而nginx 的ingress-controller配置中則多了一個nginx.ingress.kubernetes.io/use-regex: "true" 的注解。 rule中的寫法和Nginx中的配置是類似的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM