溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Kubernetes V1.17開啟 拓?fù)涓兄?wù)路由

發(fā)布時間:2020-02-29 12:10:49 來源:網(wǎng)絡(luò) 閱讀:513 作者:juestnow 欄目:系統(tǒng)運維

Kubernetes V1.17開啟 拓?fù)涓兄?wù)路由

1、名詞解釋:

拓?fù)溆颍罕硎驹诩褐心硞€節(jié)點,可操作區(qū)域,也就是拓?fù)溆蛎?Endpoint: IP-Port 一般來說是Node當(dāng)中pod的ip+port。
Service:一組依靠labelselector的pod,起到流量均衡分發(fā)管理的作用。

2、給所有組件打開ServiceTopology和Endpointslice

集群版本在V1.17以上
Kube-proxy 以iptables或IPVS模式運行(alpha階段暫時只實現(xiàn)這兩種模式)。
Service K8S的service資源,關(guān)聯(lián)一組endpoint,準(zhǔn)發(fā)到某個endpoint。
啟用了Endpoint Slices
給所有組件打開ServiceTopology和Endpointslice這兩個Feature gate:
--feature-gates=ServiceTopology=true,EndpointSlice=true 

3、kube-apiserver 組件修改

kube-apiserver 前期啟動OwnerReferencesPermissionEnforcement 插件請刪除不然一直提示  Warning  FailedToUpdateEndpointSlices  8m24s (x7 over 11m)  endpoint-slice-controller  (combined from similar events): Error updating Endpoint Slices for Service kube-system/kube-dns: Error creating EndpointSlice for Service kube-syste
m/kube-dns: endpointslices.discovery.k8s.io "kube-dns-x8qmh" is forbidden: cannot set blockOwnerDeletion if an ownerReference refers to a resource you can't set finalizers on: , <nil>

4、更新配置文件及重啟所有組件

5、驗證endpointslices 是否正常

root@Qist:/opt/kube14# kubectl get endpointslices
NAME                   ADDRESSTYPE   PORTS        ENDPOINTS                    AGE
kube-dns-kh6ls         IPv4          53,9153,53   10.83.98.136,10.90.153.135   15m
metrics-server-gqgqm   IPv4          443          10.93.92.195                 15m

6、 驗證ServiceTopology

在 Service spec 里加上 topologyKeys 字段,表示該 Service 優(yōu)先順序選用的拓?fù)溆蛄斜?,對?yīng)節(jié)點標(biāo)簽的 key;當(dāng)訪問此 Service 時,會找是否有 endpoint 有對應(yīng) topology key 的拓?fù)湫畔⒉⑶?value 跟當(dāng)前節(jié)點也一樣,如果是,那就選定此 topology key 作為當(dāng)前轉(zhuǎn)發(fā)的拓?fù)溆颍⑶液Y選出其余所有在這個拓?fù)溆虻?endpoint 來進(jìn)行轉(zhuǎn)發(fā);如果沒有找到任何 endpoint 在當(dāng)前 topology key 對應(yīng)拓?fù)溆?,就會嘗試第二個 topology key,依此類推;如果遍歷完所有 topology key 也沒有匹配到 endpoint 就會拒絕轉(zhuǎn)發(fā),就像此 service 沒有后端 endpoint 一樣。

有一個特殊的 topology key “*“,它可以匹配所有 endpoint,如果 topologyKeys 包含了 *,它必須在列表末尾,通常是在沒有匹配到合適的拓?fù)溆騺韺崿F(xiàn)就近轉(zhuǎn)發(fā)時,就打消就近轉(zhuǎn)發(fā)的念頭,可以轉(zhuǎn)發(fā)到任意 endpoint 上。

當(dāng)前 topology key 支持以下可能的值(未來會增加更多):

kubernetes.io/hostname: 節(jié)點的 hostname,通常將它放列表中第一個,表示如果本機(jī)有 endpoint 就直接轉(zhuǎn)發(fā)到本機(jī)的 endpoint。
topology.kubernetes.io/zone: 節(jié)點所在的可用區(qū),通常將它放在 kubernetes.io/hostname 后面,表示如果本機(jī)沒有對應(yīng) endpoint,就轉(zhuǎn)發(fā)到當(dāng)前可用區(qū)其它節(jié)點上的 endpoint(部分云廠商跨可用區(qū)通信會收取額外的流量費用)。
topology.kubernetes.io/region: 表示節(jié)點所在的地域,表示轉(zhuǎn)發(fā)到當(dāng)前地域的 endpoint,這個用的應(yīng)該會比較少,因為通常集群所有節(jié)點都只會在同一個地域,如果節(jié)點跨地域了,節(jié)點之間通信延時將會很高。
*: 忽略拓?fù)溆颍ヅ渌?endpoint,相當(dāng)于一個保底策略,避免丟包,只能放在列表末尾。
topologyKeys 與 externalTrafficPolicy=Local 不兼容,是互斥的,如果 externalTrafficPolicy 為 Local,就不能定義 topologyKeys,反之亦然。
topology key 必須是合法的 label 格式,并且最多定義 16 個 key。
# 以kube-dns 為例:
---
apiVersion: v1
kind: Service
metadata:
  name: kube-dns
  namespace: kube-system
  labels:
    k8s-app: kube-dns
    kubernetes.io/cluster-service: "true"
    addonmanager.kubernetes.io/mode: Reconcile
    kubernetes.io/name: "CoreDNS"
spec:
  selector:
    k8s-app: kube-dns
  clusterIP: 192.66.0.2
  topologyKeys: ["kubernetes.io/hostname", "topology.kubernetes.io/zone", "*"] # 添加參數(shù)
  ports:
  - name: dns
    port: 53
    protocol: UDP
  - name: dns-tcp
    port: 53
    protocol: TCP
  - name: metrics
    port: 9153
    protocol: TCP
# 驗證ServiceTopology 是否生效
進(jìn)去node 節(jié)點
無kube-dns 容器節(jié)點
root@k8s-master-01:~# ipvsadm -Ln | grep :53
TCP  10.66.0.2:53 rr
  -> 10.83.98.136:53              Masq    1      0          0
  -> 10.90.153.135:53             Masq    1      0          0
UDP  10.66.0.2:53 rr
  -> 10.83.98.136:53              Masq    1      0          0
  -> 10.90.153.135:53             Masq    1      0          0
# 有kube-dns 容器節(jié)點
[root@k8s-node-09 ~]# ipvsadm -Ln| grep :53
TCP  10.66.0.2:53 rr
  -> 10.90.153.135:53             Masq    1      0          0
UDP  10.66.0.2:53 rr
  -> 10.90.153.135:53             Masq    1      0          0
# 直接就是當(dāng)前node 節(jié)點容器IP
向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI