日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

通過命令行管理多集群服務(wù)實現(xiàn)Kubernetes服務(wù)的跨集群訪問

通過多集群服務(wù),讓您無需創(chuàng)建負(fù)載均衡,即可實現(xiàn)Kubernetes服務(wù)的跨集群訪問。本文通過示例介紹如何在Fleet實例上創(chuàng)建ServiceExport、ServiceImport等資源來管理多集群服務(wù),實現(xiàn)Kubernetes服務(wù)的跨集群訪問。

前提條件

概述

通過多集群服務(wù)實現(xiàn)Kubernetes服務(wù)的跨集群訪問,打破了多集群服務(wù)訪問的邊界。多集群服務(wù)示例如下圖所示。

多集群服務(wù)

  1. 管理員在服務(wù)提供者集群(ACK Cluster 1)和服務(wù)消費(fèi)者集群(ACK Cluster 2)中,創(chuàng)建應(yīng)用相關(guān)資源,包含Namespace、Deployment和Service;創(chuàng)建多集群Service資源,包括ServiceExport和ServiceImport。

  2. 多集群艦隊Fleet監(jiān)聽子集群的ServiceExport和ServiceImport資源,同步多集群Service對應(yīng)的Endpoint信息。

  3. 在服務(wù)消費(fèi)者集群ACK Cluster 2上,Client Pod可跨集群訪問服務(wù)提供者集群ACK Cluster 1上的Service1。

步驟一:創(chuàng)建服務(wù)提供者相關(guān)資源

如果您的服務(wù)提供者集群ACK Cluster 1已經(jīng)部署了Kubernetes服務(wù)和相關(guān)資源,可以跳過此步驟。

  1. 在服務(wù)提供者集群ACK Cluster 1上,執(zhí)行以下命令,創(chuàng)建服務(wù)提供者命名空間。

    示例的命名空間為provider-ns

    kubectl create ns provider-ns
  2. 在服務(wù)提供者集群ACK Cluster 1上,創(chuàng)建服務(wù)提供者Kubernetes服務(wù)和相關(guān)的Deployment等資源。

    1. 使用以下內(nèi)容,創(chuàng)建一個app-meta.yaml文件。

      apiVersion: v1       # 服務(wù)提供者。
      kind: Service
      metadata:
        name: service1
        namespace: provider-ns
      spec:
        ports:
        - name: http
          port: 80
          protocol: TCP
          targetPort: 8080
        selector:
          app: web-demo
        sessionAffinity: None
        type: ClusterIP
      ---
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        labels:
          app: web-demo
        name: web-demo
        namespace: provider-ns
      spec:
        replicas: 2
        selector:
          matchLabels:
            app: web-demo
        template:
          metadata:
            labels:
              app: web-demo
          spec:
            containers:
            - image: acr-multiple-clusters-registry.cn-hangzhou.cr.aliyuncs.com/ack-multiple-clusters/web-demo:0.4.0
              name: web-demo
              env:
              - name: ENV_NAME
                value: cluster1-beijing
    2. 執(zhí)行以下命令,在服務(wù)提供者集群ACK Cluster 1中創(chuàng)建資源。

      kubectl apply -f app-meta.yaml
    3. 執(zhí)行以下命令,在服務(wù)提供者集群ACK Cluster 1中創(chuàng)建ServiceExport資源,指定需要開放多集群訪問的Kubernetes服務(wù)。

      apiVersion: multicluster.x-k8s.io/v1alpha1
      kind: ServiceExport
      metadata:
        name: service1           # 名稱與待開放的Kubernetes服務(wù)名稱相同。
        namespace: provider-ns   # 與待開放的Kubernetes服務(wù)在同一個命名空間。

      具體參數(shù)說明如下:

      參數(shù)

      說明

      metadata.name

      待開放的Kubernetes服務(wù)名稱。

      metadata.namespace

      待開放的Kubernetes服務(wù)所在的命名空間。

步驟二:配置消費(fèi)者集群

  1. 在服務(wù)消費(fèi)者集群ACK Cluster 2上,執(zhí)行以下命令,創(chuàng)建服務(wù)提供者命名空間。

    示例的命名空間為provider-ns

    kubectl create ns provider-ns
  2. 在服務(wù)消費(fèi)者集群ACK Cluster 2中,使用以下內(nèi)容,創(chuàng)建ServiceImport資源。

    apiVersion: multicluster.x-k8s.io/v1alpha1
    kind: ServiceImport
    metadata:
      name: service1           
      namespace: provider-ns   
    spec:
      ports:                   # 與待開放的Kubernetes服務(wù)ports相同。
      - name: http
        port: 80
        protocol: TCP
      type: ClusterSetIP

    以上示例代碼中ServiceImport的spec字段僅定義了部分參數(shù)。關(guān)于spec完整的參數(shù)說明如下表所示。

    參數(shù)

    說明

    metadata.name 

    服務(wù)名稱,需要與待開放的Kubernetes服務(wù)名稱相同。

    metadata.namespace

    服務(wù)命名空間。需要與待開放的Kubernetes服務(wù)命名空間一致。

    spec. ports. name

    Port名稱。需要與待開放的Kubernetes服務(wù)相應(yīng)字段一致。

    spec. ports. protocol

    協(xié)議。需要與待開放的Kubernetes服務(wù)相應(yīng)字段一致。

    spec. ports. appProtocol

    應(yīng)用協(xié)議。需要與待開放的Kubernetes服務(wù)相應(yīng)字段一致。

    spec. ports. port

    Port。需要與待開放的Kubernetes服務(wù)相應(yīng)字段一致。

    spec. ips

    服務(wù)VIP。由Fleet實例分配,無需填寫。

    spec. type

    支持ClusterSetIPHeadless

    當(dāng)待開放的Kubernetes服務(wù)的ClusterIPNone時,表示服務(wù)為Headless服務(wù),設(shè)置typeHeadless

    否則,設(shè)置typeClusterSetIP

    spec. sessionAffinity

    會話關(guān)聯(lián),支持ClientIPNone。需要與待開放的Kubernetes服務(wù)相應(yīng)字段一致。

    spec. sessionAffinityConfig

    會話關(guān)聯(lián)配置。需要與待開放的Kubernetes服務(wù)相應(yīng)字段一致。

步驟三:訪問多集群服務(wù)

在服務(wù)消費(fèi)者集群Cluster 2中的Client Pod可以通過以下兩種方式訪問服務(wù)提供者集群ACK Cluster 1中的Service 1。

方式一:通過新的Service名稱訪問

服務(wù)消費(fèi)者集群ACK Cluster 2創(chuàng)建ServiceImport后,F(xiàn)leet實例會在服務(wù)消費(fèi)者集群ACK Cluster 2中,創(chuàng)建一個以amcs-為前綴的Kubernetes服務(wù)代表多集群Service。

在服務(wù)消費(fèi)者集群ACK Cluster 2的Client Pod中,可以通過訪問amcs-service1.provider-ns來訪問服務(wù)提供者集群ACK Cluster 1中的Service 1。

  1. 在服務(wù)消費(fèi)者集群ACK Cluster 2上執(zhí)行以下命令,獲取相關(guān)Service信息。

    kubectl get service -n provider-ns

    預(yù)期輸出:

    NAME            TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
    amcs-service1   ClusterIP   172.xx.xx.xx   <none>        80/TCP    26m
  2. 在服務(wù)消費(fèi)者集群ACK Cluster 2的Client Pod上執(zhí)行以下命令,訪問服務(wù)提供者集群ACK Cluster 1中的Service 1。

    curl amcs-service1.provider-ns

方式二:通過新的Service域名訪問

  1. 在服務(wù)消費(fèi)者集群Cluster 2中安裝或升級CoreDNS,版本要求1.9.3及以上。具體操作,請參見CoreDNS管理組件

  2. 修改CoreDNS組件的配置Corefile。

    1. 執(zhí)行如下命令,修改CoreDNS組件的ConfigMap文件。

      kubectl edit configmap coredns -n kube-system
    2. 在Corefile文件中新增一行配置項multicluster clusterset.local,支持多集群服務(wù)域名解析。

      apiVersion: v1
      data:
        Corefile: |
          .:53 {
              errors
              health {
                 lameduck 15s
              }
              ready
              multicluster clusterset.local    #增加配置項,支持多集群服務(wù)域名解析。
              kubernetes cluster.local in-addr.arpa ip6.arpa {
      
                pods verified
                ttl 30
                fallthrough in-addr.arpa ip6.arpa
              }
              ...
          }
      kind: ConfigMap
      metadata:
        name: coredns
        namespace: kube-system
                                      
  3. 在服務(wù)消費(fèi)者集群Cluster 2的Client Pod上執(zhí)行如下命令,訪問服務(wù)提供者集群Cluster 1中的Service 1。

    curl service1.provider-ns.svc.clusterset.local
  4. (可選)通過修改服務(wù)消費(fèi)者集群Cluster 2中Client Pod的dnsConfig.searches,訪問多集群服務(wù)。

    1. 在Client Pod的dnsConfig.searches字段中增加搜索clusterset.local的域名。

      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: client-pod
        namespace: consumer-ns
      spec:
        ...
        template:
          ...
          spec:
            dnsPolicy: "ClusterFirst"    
            dnsConfig:                   
              searches:                        #dnsConfig,增加搜索clusterset.local域名。
                - svc.clusterset.local
                - clusterset.local
                - consumer-ns.svc.cluster.local
                - svc.cluster.local
                - cluster.local
            containers:
            - name: client-pod
              ...
    2. 執(zhí)行如下命令,訪問多集群服務(wù)。

      curl service1.provider-ns

相關(guān)文檔

除了命令行方式,您也可以通過控制臺方式管理多集群服務(wù)。具體操作,請參見通過控制臺管理多集群服務(wù)