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

使用DNS代理進行多集群服務發現

當您在多集群環境下遇到服務通信障礙時,可以使用DNS代理并解析跨越多個集群的服務請求,實現多集群服務發現,確保服務的平滑路由和快速訪問,增強服務的可伸縮性和靈活性,降低系統的復雜度。

前提條件

功能介紹

在多集群管理模式下部署應用時,不同集群下部署的不同服務無法進行相互發現。要實現跨集群的服務調用,需要兩個集群中部署相同的Service,才能使發送請求的工作負載通過DNS請求發現其它集群中的服務。

多集群模式應用部署場景示例如下。在示例中,由統一的服務網格控制面對集群1和集群2中的所有網格代理進行管理。服務之間的調用關系為sleep調用httpbin,且只有集群1中部署了sleep Service、只有集群2中部署了httpbin Service。此時,sleep無法調用httpbin應用,因為集群1中沒有部署httpbin的Service,sleep無法自動發現httpbin服務。Dingtalk_20230823181631.png

服務網格ASM支持使用DNS代理功能。開啟DNS代理功能后,當網格代理收到來自應用程序的DNS查詢時,網格代理將進行透明地攔截與解析,從而提供對跨集群服務的服務發現能力。

步驟一:部署sleep和httpbin應用

  1. 使用以下內容,在m1c2集群中部署sleep應用。具體操作,請參見在ASM實例關聯的集群中部署應用

    展開查看sleep YAML文件

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: sleep
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: sleep
      labels:
        app: sleep
        service: sleep
    spec:
      ports:
      - port: 80
        name: http
      selector:
        app: sleep
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: sleep
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: sleep
      template:
        metadata:
          labels:
            app: sleep
        spec:
          terminationGracePeriodSeconds: 0
          serviceAccountName: sleep
          containers:
          - name: sleep
            image: curl:8.1.2
            command: ["/bin/sleep", "infinity"]
            imagePullPolicy: IfNotPresent
            volumeMounts:
            - mountPath: /etc/sleep/tls
              name: secret-volume
          volumes:
          - name: secret-volume
            secret:
              secretName: sleep-secret
              optional: true
    ---
  2. 使用以下內容,在m1c1集群中部署httpbin應用。具體操作,請參見在ASM實例關聯的集群中部署應用

    展開查看httpbin YAML文件

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: httpbin
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: httpbin
      labels:
        app: httpbin
        service: httpbin
    spec:
      ports:
      - name: http
        port: 8000
        targetPort: 80
      selector:
        app: httpbin
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: httpbin
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: httpbin
          version: v1
      template:
        metadata:
          labels:
            app: httpbin
            version: v1
        spec:
          serviceAccountName: httpbin
          containers:
          - image: docker.io/kennethreitz/httpbin
            imagePullPolicy: IfNotPresent
            name: httpbin
            ports:
            - containerPort: 80

步驟二:驗證多集群服務發現是否生效

在m1c2集群對應的KubeConfig環境下,執行以下命令,從sleep容器發起請求。

kubectl exec -it deploy/sleep -c sleep -- curl httpbin:8000

預期輸出:

curl: (6) Could not resolve host: httpbin

由于m1c2集群未部署名為httpbin的Service,集群內的DNS請求無法解析httpbin的域名,因此sleep應用無法實際將請求發出,說明多集群服務發現未生效。

步驟三:啟用DNS代理功能,驗證多集群服務發現是否生效

  1. 為ASM實例啟用DNS代理功能。具體操作,請參見啟用DNS代理功能

  2. 在m1c2集群中,重新部署sleep應用的工作負載。具體操作,請參見重新部署工作負載

  3. 在m1c2集群對應的KubeConfig環境下,執行以下命令,從sleep容器發起請求。

kubectl exec -it deploy/sleep -c sleep -- curl httpbin:8000

預期輸出:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>httpbin.org</title>
...

預期輸出表明請求的響應內容為httpbin服務響應的HTML內容,說明多集群服務發現生效。