Kubernetes V1.17トポロジセンシングサービスルーティングをオンにする


Kubernetes V1.17トポロジセンシングサービスルーティングをオンにする
1、名詞の解釈:
   :          ,     ,       。
Endpoint: IP-Port      Node  pod ip+port。
Service:    labelselector pod,             。

2、すべてのコンポーネントにサービスTopologyとEndpointsliceを開く
     V1.17  
Kube-proxy  iptables IPVS    (alpha            )。
Service K8S service  ,    endpoint,     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: , 

4、プロファイルの更新とすべてのコンポーネントの再起動
5.endpointslicesが正常であることを確認する
root@Qist:/opt/kube14# kubectl get endpointslices
NAME                   ADDRESSTYPE   PORTS        ENDPOINTS                    AGE
kube-dns-kh5ls         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             ,        key;     Service  ,      endpoint     topology key         value         ,   ,      topology key           ,                 endpoint      ;         endpoint     topology key      ,        topology key,    ;        topology key        endpoint       ,    service      endpoint   。

       topology key “*“,        endpoint,   topologyKeys     *,        ,                       ,          ,        endpoint  。

   topology key         (       ):

kubernetes.io/hostname:     hostname,           ,        endpoint           endpoint。
topology.kubernetes.io/zone:         ,       kubernetes.io/hostname   ,           endpoint,                endpoint(                     )。
topology.kubernetes.io/region:          ,           endpoint,          ,                   ,        ,            。
*:      ,     endpoint,         ,    ,        。
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", "*"] #     
  ports:
  - name: dns
    port: 53
    protocol: UDP
  - name: dns-tcp
    port: 53
    protocol: TCP
  - name: metrics
    port: 9153
    protocol: TCP
#   ServiceTopology     
  node   
 kube-dns     
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     
[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
#       node     IP