W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
FEATURE STATE: Kubernetes v1.21 [deprecated]
此功能特性,尤其是 Alpha 階段的 ?
topologyKeys
?API,在 Kubernetes v1.21 版本中已被廢棄。Kubernetes v1.21 版本中引入的 拓撲感知的提示, 提供類似的功能。
服務拓撲(Service Topology)可以讓一個服務基于集群的 Node 拓撲進行流量路由。 例如,一個服務可以指定流量是被優(yōu)先路由到一個和客戶端在同一個 Node 或者在同一可用區(qū)域的端點。
默認情況下,發(fā)往 ?ClusterIP
?或者 ?NodePort
?服務的流量可能會被路由到 服務的任一后端的地址。Kubernetes 1.7 允許將“外部”流量路由到接收到流量的 節(jié)點上的 Pod。對于 ?ClusterIP
?服務,無法完成同節(jié)點優(yōu)先的路由,你也無法 配置集群優(yōu)選路由到同一可用區(qū)中的端點。 通過在 Service 上配置 ?topologyKeys
?,你可以基于來源節(jié)點和目標節(jié)點的 標簽來定義流量路由策略。
通過對源和目的之間的標簽匹配,作為集群操作者的你可以根據(jù)節(jié)點間彼此“較近”和“較遠” 來定義節(jié)點集合。你可以基于符合自身需求的任何度量值來定義標簽。 例如,在公有云上,你可能更偏向于把流量控制在同一區(qū)內,因為區(qū)間流量是有費用成本的, 而區(qū)內流量則沒有。 其它常見需求還包括把流量路由到由 ?DaemonSet
?管理的本地 Pod 上,或者 把將流量轉發(fā)到連接在同一機架交換機的節(jié)點上,以獲得低延時。
如果集群啟用了 ?ServiceTopology
?特性門控, 你就可以在 Service 規(guī)約中設定 ?topologyKeys
?字段,從而控制其流量路由。 此字段是 ?Node
?標簽的優(yōu)先順序字段,將用于在訪問這個 ?Service
?時對端點進行排序。 流量會被定向到第一個標簽值和源 ?Node
?標簽值相匹配的 ?Node
?。 如果這個 ?Service
?沒有匹配的后端 ?Node
?,那么第二個標簽會被使用做匹配, 以此類推,直到?jīng)]有標簽。
如果沒有匹配到,流量會被拒絕,就如同這個 ?Service
?根本沒有后端。 換言之,系統(tǒng)根據(jù)可用后端的第一個拓撲鍵來選擇端點。 如果這個字段被配置了而沒有后端可以匹配客戶端拓撲,那么這個 ?Service
?對那個客戶端是沒有后端的,鏈接應該是失敗的。 這個字段配置為 ?"*"
? 意味著任意拓撲。 這個通配符值如果使用了,那么只有作為配置值列表中的最后一個才有用。
如果 ?topologyKeys
?沒有指定或者為空,就沒有啟用這個拓撲約束。
一個集群中,其 ?Node
?的標簽被打為其主機名,區(qū)域名和地區(qū)名。 那么就可以設置 ?Service
?的 ?topologyKeys
?的值,像下面的做法一樣定向流量了。
Node
?上的端點,?Node
?上沒有端點存在時就失?。?nbsp;配置 [?"kubernetes.io/hostname"
?]。
Node
?上的端點,回退同一區(qū)域的端點上,然后是同一地區(qū), 其它情況下就失?。号渲?nbsp;[??"kubernetes.io/hostname"?, "topology.kubernetes.io/zone", "topology.kubernetes.io/region"
?]。 這或許很有用,例如,數(shù)據(jù)局部性很重要的情況下。
"topology.kubernetes.io/zone", "*"
?]。externalTrafficPolicy=Local
? 是不兼容的,所以 ?Service
?不能同時使用這兩種特性。 但是在同一個集群的不同 ?Service
?上是可以分別使用這兩種特性的,只要不在同一個 ?Service
?上就可以。
kubernetes.io/hostname
?、?topology.kubernetes.io/zone
? 和 ?topology.kubernetes.io/region
?,但是未來會推廣到其它的 ?Node
?標簽。
"*"
?,如果要用,則必須是拓撲鍵值的最后一個值。以下是使用服務拓撲功能的常見示例。
僅路由到節(jié)點本地端點的一種服務。如果節(jié)點上不存在端點,流量則被丟棄:
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 9376
topologyKeys:
- "kubernetes.io/hostname"
首選節(jié)點本地端點,如果節(jié)點本地端點不存在,則回退到集群范圍端點的一種服務:
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 9376
topologyKeys:
- "kubernetes.io/hostname"
- "*"
首選地域端點而不是區(qū)域端點的一種服務。 如果以上兩種范圍內均不存在端點, 流量則被丟棄。
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 9376
topologyKeys:
- "topology.kubernetes.io/zone"
- "topology.kubernetes.io/region"
優(yōu)先選擇節(jié)點本地端點,地域端點,然后是區(qū)域端點,最后才是集群范圍端點的 一種服務。
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 9376
topologyKeys:
- "kubernetes.io/hostname"
- "topology.kubernetes.io/zone"
- "topology.kubernetes.io/region"
- "*"
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: