使用kube-proxy讓外部網絡訪問K8S service的ClusterIP


配置方式

kubernetes版本大於或者等於1.2時,外部網絡(即非K8S集群內的網絡)訪問cluster IP的辦法是:
修改master的/etc/kubernetes/proxy,把KUBE_PROXY_ARGS=”“改為KUBE_PROXY_ARGS=”–proxy-mode=userspace”
啟動kube-proxy服務
在核心路由設備或者源主機上添加一條路由,訪問cluster IP段的路由指向到master上。

kubernetes版本小於1.2時,直接添加路由

這里寫圖片描述

kube-proxy轉發的兩種模式

kube-proxy在轉發時主要有兩種模式Userspace和Iptables。如下圖,左側是Userspace模式,也是kube-proxy默認的方式,所有的轉發都是通過kube-proxy軟件實現的;右側是Iptables模式,所有轉發都是通過Iptables內核模塊實現,而kube-proxy只負責生成相應的Iptables規則。
kube-proxy
使用Userspace模式(k8s版本為1.2之前默認模式),外部網絡可以直接訪問cluster IP。
使用Iptables模式(k8s版本為1.2之后默認模式),外部網絡不能直接訪問cluster IP。
從效率上看,Iptables會更高一些,但是需要Iptables version >=1.4.11,Iptables模式在k8s1.2版本放出。

service轉發后端服務的四種類型

ClusterIP

此類型會提供一個集群內部的虛擬IP(與Pod不在同一網段),以供集群內部的pod之間通信使用。ClusterIP也是Kubernetes service的默認類型。
ClusterIP
為了實現圖上的功能主要需要以下幾個組件的協同工作:
apiserver:在創建service時,apiserver接收到請求以后將數據存儲到etcd中。
kube-proxy:k8s的每個節點中都有該進程,負責實現service功能,這個進程負責感知service,pod的變化,並將變化的信息寫入本地的iptables中。
iptables:使用NAT等技術將virtualIP的流量轉至endpoint中。

NodePort

NodePort模式除了使用cluster ip外,也將service的port映射到每個node的一個指定內部port上,映射的每個node的內部port都一樣。
為每個節點暴露一個端口,通過nodeip + nodeport可以訪問這個服務,同時服務依然會有cluster類型的ip+port。內部通過clusterip方式訪問,外部通過nodeport方式訪問。
這里寫圖片描述

loadbalance

LoadBalancer在NodePort基礎上,K8S可以請求底層雲平台創建一個負載均衡器,將每個Node作為后端,進行服務分發。該模式需要底層雲平台(例如GCE)支持。

Ingress

Ingress,是一種HTTP方式的路由轉發機制,由Ingress Controller和HTTP代理服務器組合而成。Ingress Controller實時監控Kubernetes API,實時更新HTTP代理服務器的轉發規則。HTTP代理服務器有GCE Load-Balancer、HaProxy、Nginx等開源方案。
詳細說明請見http://blog.csdn.net/liyingke112/article/details/77066814
這里寫圖片描述

service的三種端口

port

service暴露在cluster ip上的端口,:port 是提供給集群內部客戶訪問service的入口。

nodePort

nodePort是k8s提供給集群外部客戶訪問service入口的一種方式,:nodePort 是提供給集群外部客戶訪問service的入口。

targetPort

targetPort是pod上的端口,從port和nodePort上到來的數據最終經過kube-proxy流入到后端pod的targetPort上進入容器。

port、nodePort總結

總的來說,port和nodePort都是service的端口,前者暴露給集群內客戶訪問服務,后者暴露給集群外客戶訪問服務。從這兩個端口到來的數據都需要經過反向代理kube-proxy流入后端pod的targetPod,從而到達pod上的容器內。


免責聲明!

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



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