日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

Router vs Route詳解 route和router的區(qū)別是什么

一、OpenShift 為什么需要 Router 和 Route?
顧名思義,Router 是路由器,Route 是路由器中配置的路由 。OpenShift 中的這兩個概念是為了解決從集群外部(就是從除了集群節(jié)點以外的其它地方)訪問服務(wù)的需求 。不曉得為什么OpenShift 要將Kubernetes 中的 Ingress 改為 Router,我倒是覺得 Ingress 名字更貼切 。
從外部通過 router 和從內(nèi)部通過 servide 訪問 pod 中的應用兩個過程的簡單的示意圖如下:

Router vs Route詳解 route和router的區(qū)別是什么


上圖中,某個應用的三個pod 分別位于 node1,node2 和 node3 上 。OpenShift 中有三層IP地址概念:
  • pod 自己的 IP 地址,可以類比為 OpenStack 中虛擬機的固定IP 。它只有在集群內(nèi)才有意義 。
  • service 的 IP 地址 。Service 通常有 ClusterIP,這也是一種集群內(nèi)部的IP 地址 。
  • 應用的外部 IP 地址,可以類比為OpenStack 中的浮動IP,或者IDC IP(和浮動IP 之間是NAT 映射關(guān)系) 。

因此,要從集群外部訪問 pod 中的應用,無非兩種方式:
  • 一種是利用一個代理(proxy),把外部 IP 地址轉(zhuǎn)化為后端的 Pod IP 地址 。這就是 OpenShift router/route 的思路 。OpenShift 中的 router 服務(wù),是一個運行在特定節(jié)點(通常是基礎(chǔ)架構(gòu)節(jié)點)上的集群基礎(chǔ)服務(wù),由集群管理員負責創(chuàng)建和管理 。它可以有多個副本(pod) 。router 中可有多個 route,每個 route 能通過外部HTTP 請求的域名找出其后端的 pod 列表,并進行網(wǎng)絡(luò)包的轉(zhuǎn)發(fā) 。也就是將pod 中的應用暴露到外網(wǎng)域名,使得用戶可以外面通過域名訪問到應用 。這實際上是一種七層負載均衡器 。OpenShift 默認采用 HAProxy 來實現(xiàn),當然也支持其它實現(xiàn),比如 F5.
  • 另一種是將服務(wù)直接暴露到集群外 。這種方式具體會在『服務(wù) Service』那一篇文章中詳細解釋 。

二、OpenShift 如何利用 HAProxy 實現(xiàn) router 和 route?
2.1 Router 部署
使用 ansible 采用默認配置部署 OpenShift 集群時,在集群 Infra 節(jié)點上,會以 Host networking 方式運行一個 HAProxy 的 pod,它會在所有網(wǎng)卡的 80 和 443 端口上進行監(jiān)聽 。
[root@infra-node3 cloud-user]# netstat -lntp | grep haproxytcp 0 0 127.0.0.1:10443 0.0.0.0:* LISTEN 583/haproxy tcp 0 0 127.0.0.1:10444 0.0.0.0:* LISTEN 583/haproxy tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 583/haproxy tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 583/haproxy
其中,172.0.0.1 上的 10443 和 10444 是HAproxy 自己使用的 。下文會有解釋 。
因此,在每個 infra 節(jié)點上,只能有一個 HAProxy pod,因為這些端口只能被占用一次 。如果調(diào)度器找不到滿足要求的節(jié)點,則router 服務(wù)的調(diào)度就會失?。?br /> 0/7 nodes are available: 2 node(s) didn't have free ports for the requested pod ports, 5 node(s) didn't match node selector
OpenShift HAProxy Router 支持兩種部署方式:
  • 一種是常見的單Router 服務(wù)部署,它有一個或多個實例(pod),分布在多個節(jié)點上,負責整個集群上部署的服務(wù)的對外訪問 。
  • 另一種是分片(sharding)部署 。此時,會有多個 Router 服務(wù),每個Router 服務(wù)負責指定的若干project,兩者之間采用標簽(label)進行映射 。這是為了解決單個 Router 的性能不夠問題而提出的解決方案 。

OpenShift 提供了 oc adm router 命令來創(chuàng)建 router 服務(wù) 。
創(chuàng)建router:
[root@master1 cloud-user]# oc adm router router2 --replicas=1 --service-account=routerinfo: password for stats user admin has been set to J3YyPjlbqf--> Creating router router2 ... warning: serviceaccounts "router" already exists clusterrolebinding.authorization.openshift.io "router-router2-role" created deploymentconfig.apps.openshift.io "router2" created service "router2" created--> Success

推薦閱讀