Ingress是Kubernetes中的一種資源類型,它管理着從集群外部訪問集群內部服務的路由規則。它提供統一的入口,可以將所有的HTTP(S)流量路由到正確的服務。
一、什麼是Ingress Nginx?
Ingress Nginx是一個開源的支持Kubernetes的負載均衡器,可以擴展Kubernetes以便於更好地支持外部請求。 它支持使用多種負載均衡算法和HTTP/HTTPS協議。 Ingress Nginx還提供了多種插件,可以支持認證、重定向、IP白名單,以及安全策略等功能。
使用Ingress Nginx可以有效地減少集群中暴露的端口數量,提高了集群的安全性,同時也可方便地管理和配置路由規則。
二、如何在Kubernetes中使用Ingress Nginx?
Ingress Nginx需要使用Ingress對象來管理路由規則。 編寫一個Ingress對象需要一個主機名(host)或者一個主機名和一個路徑(path)。 對於一個請求,Ingress會使用這個主機名和路徑來匹配路由規則,並將這個請求路由到相應的服務中。
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: my-ingress spec: rules: - host: example.com http: paths: - path: /foo pathType: Prefix backend: service: name: my-service port: name: http
上面的YAML文件定義了一個名為my-ingress的Ingress對象,它將主機名example.com/foo轉發到my-service的端口 http。
根據需要,可以使用其他的Ingress控制器實現相同的功能。但是,Ingress Nginx是最常用的控制器,並為大多數工作負載提供了全部支持。
三、Ingress Nginx的主要特性
1. TLS支持
Ingress Nginx可以通過TLS證書保護應用程序,確保HTTP(S)通信的機密性。 它提供了多種配置TLS的方法,包括通配符證書和SNI(服務器名稱指示符)。
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: my-ingress annotations: nginx.ingress.kubernetes.io/ssl-redirect: "true" spec: tls: - hosts: - example.com secretName: example-tls rules: - host: example.com http: paths: - path: /foo pathType: Prefix backend: service: name: my-service port: name: http
上面的YAML文件中增加了一個名為example-tls的TLS的secret配置,並在Ingress對象中指定了TLS證書的屬性。
2. 負載均衡和流量控制
使用Ingress Nginx,可以使用多種負載均衡算法(例如Round Robin,Least Connections)和HTTP/HTTPS協議。它還支持一系列流量控制方法,包括IP白名單和黑名單,cookie,來自指定區域的流量控制和緩存等。
3. 多協議支持
Ingress Nginx支持通過WebSocket協議進行通信,它定義了一種協議擴展,可以將HTTP連接升級到帶有雙向通信能力的WebSocket連接,使得應用程序可以在不刷新頁面的情況下接受更新。
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: my-ingress spec: rules: - host: example.com http: paths: - path: /foo pathType: Prefix backend: service: name: my-service port: name: http - host: ws.example.com http: paths: - path: /ws pathType: Prefix backend: service: name: my-websocket-service port: name: websocket nginx.org/websocket-services: "my-websocket-service"
YAML文件例子中,定義了2個路徑,一個是默認的http路徑,一個是基於WebSocket協議的ws路徑,對應的service中聲明了對應的端口名稱,以支持兩種不同的網絡通信方式。
4. 認證和授權
Ingress Nginx支持多種認證和授權的插件,例如基於HTTP基本認證、客戶端證書、OAuth等。
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: my-ingress annotations: nginx.ingress.kubernetes.io/auth-type: basic nginx.ingress.kubernetes.io/auth-secret: basic-auth spec: rules: - host: example.com http: paths: - path: /foo pathType: Prefix backend: service: name: my-service port: name: http
示例的YAML文件中使用了基本認證,在Ingress對象中指定了隱含密鑰basic-auth的屬性。
四、結論
對於需要對外暴露服務的Kubernetes集群,Ingress Nginx是一個非常有用的工具。 它支持多種負載均衡算法,可以通過TLS證書保護應用程序,還可以採用各種插件進行認證和授權,並支持多種流量控制方式。 在使用Ingress對象管理路由規則時,可以有效地減少集群中要暴露的端口數量,提高了集群的安全性。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/154105.html