書籍來源:《Kubernetes網絡權威指南:基礎、原理與實踐》
一邊學習一邊整理讀書筆記,并與大家分享,侵權即删,謝謝支援!
附上彙總貼:《Kubernetes網絡權威指南》讀書筆記 | 彙總_COCOgsta的部落格-CSDN部落格
在Kubernets中,L7的轉發功能、叢集外通路Service,都是專門交給Ingress的。
Ingress可能是暴露服務的最強大方式,也是最複雜的。Kubernetes Ingress提供了負載平衡器的典型特性:HTTP路由、黏性會話、SSL終止、SSL直通、TCP和UDP負載平衡等。
3.6.1KubernetesIngress
Kubernetes的Ingress資源對象是指授權入站連接配接到達叢集内服務的規則集合。
圖3-18 沒有Ingress時通路叢集内服務
圖3-19所示為引入Ingress後通路叢集内服務的狀态。
圖3-19 引入Ingress後通路叢集内服務的狀态
Ingress的作用就是在邊界路由處開個口子,放外部流量進來。是以,Ingress是建立在Service之上的L7通路入口,它支援通過URL的方式将Service暴露到k8s叢集外;支援自定義Service的通路政策;提供按域名通路的虛拟主機功能;支援TLS通信。Ingress的作用如圖3-20所示。
圖3-20 Ingress的作用
在上面這個例子中,Ingress可以基于用戶端請求的URL做流量分發,轉發給不同的Service後端。
我們來看Ingress資源對象的API定義:
把上面這個Ingress對象建立起來後,通過kubectl get我們可以看到:
其中,ADDRESS即Ingress的通路入口位址,ACKEND是Ingress對接的後端Kubernetes Service IP+Port,ULE是自定義的通路政策,主要基于URL的轉發政策,若為空,則通路ADDRESS的所有流量都轉發給BACKEND。
下面給出一個Ingress的rules不為空的例子:
這個例子和前一個的最明顯差別是,rules定義了path分别為/foo和/bar的分發規則,分别轉發給s1:80和s2:80:
Kubernetes隻負責提供一個API定義,具體的Ingress Controller需要使用者自己實作!官方提供了Nginx和GCE的Ingress Controller示例供開發者參考。
如果想要通過域名通路Ingress,則需要使用者自己配置域名和Ingress IP的映射關系,例如host檔案、自己的DNS(不是Kube-dns)。