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

在ASM中使用DNS代理

服務網(wǎng)格中的DNS代理具備緩存DNS代理的功能。當服務網(wǎng)格收到來自應用程序的DNS查詢時,Sidecar代理將進行透明地攔截并提供解析能力。本文介紹如何在ASM中啟用和使用DNS代理功能。

前提條件

背景信息

ACK集群默認部署了一套DNS服務,為工作負載提供域名解析功能,使得在Kubernetes集群中運行的應用程序可以使用DNS解析來發(fā)現(xiàn)集群中的其他服務。

DNS服務器運行在每個Kubernetes集群中,每個Pod都會使用內部DNS服務器進行域名解析。默認情況下DNS請求不會被Sidecar代理攔截,并且每個應用程序都會在打開與其他服務的連接之前嘗試解析DNS名稱。在ASM中啟用DNS代理功能后,收到來自應用程序的DNS查詢時,Sidecar代理將進行透明地攔截并提供解析能力,加快域名解析的速度。

啟用DNS代理功能

場景一:全局啟用DNS代理功能

  1. 登錄ASM控制臺,在左側導航欄,選擇服務網(wǎng)格 > 網(wǎng)格管理

  2. 網(wǎng)格管理頁面,單擊目標實例名稱,然后在左側導航欄,選擇數(shù)據(jù)面組件管理 > Sidecar代理配置

  3. 全局頁簽下單擊DNS代理功能,打開啟用DNS代理功能開關,單擊更新設置

  4. 重啟Pod,使DNS配置在應用中生效。

    1. 登錄容器服務管理控制臺

    2. 在控制臺左側導航欄,單擊集群

    3. 集群列表頁面,單擊目標集群名稱或者目標集群右側操作列下的詳情

    4. 在集群管理頁左側導航欄,選擇工作負載 > 容器組

    5. 容器組頁面,單擊目標Pod右側操作列下的更多 > 刪除

    6. 提示對話框,單擊確定

      稍等一段時間,容器重啟后配置生效。

場景二:針對特定命名空間啟用DNS代理功能

  1. 登錄ASM控制臺,在左側導航欄,選擇服務網(wǎng)格 > 網(wǎng)格管理

  2. 網(wǎng)格管理頁面,單擊目標實例名稱,然后在左側導航欄,選擇數(shù)據(jù)面組件管理 > Sidecar代理配置

  3. Sidecar代理配置頁面,單擊命名空間頁簽。

  4. 選擇命名空間,單擊DNS代理功能,選中啟用DNS代理功能,打開右側的開關,單擊更新設置

  5. 重啟Pod,使DNS配置在應用中生效。

    1. 登錄容器服務管理控制臺

    2. 在控制臺左側導航欄,單擊集群

    3. 集群列表頁面,單擊目標集群名稱或者目標集群右側操作列下的詳情

    4. 在集群管理頁左側導航欄,選擇工作負載 > 容器組

    5. 容器組頁面,單擊目標Pod右側操作列下的更多 > 刪除

    6. 提示對話框,單擊確定

      稍等一段時間,容器重啟后配置生效。

場景三:針對特定Pod啟用DNS代理功能

您需要在Pod的YAML文件中添加注釋,才能為特定的Pod啟用DNS代理功能。

  1. 登錄容器服務管理控制臺

  2. 在控制臺左側導航欄,單擊集群

  3. 集群列表頁面,單擊目標集群名稱或者目標集群右側操作列下的詳情

  4. 在集群管理頁左側導航欄,選擇工作負載 > 無狀態(tài)

  5. 無狀態(tài)頁面目標應用右側操作列下選擇更多 > 查看Yaml

  6. 編輯 YAML對話框中spec參數(shù)下添加以下注釋,然后單擊更新

    annotations:
      proxy.istio.io/config: |
        proxyMetadata:
          ISTIO_META_DNS_CAPTURE: "true"
          ISTIO_META_DNS_AUTO_ALLOCATE: "true"

    注釋

  7. 重啟Pod,使DNS配置在應用中生效。

    1. 登錄容器服務管理控制臺

    2. 在控制臺左側導航欄,單擊集群

    3. 集群列表頁面,單擊目標集群名稱或者目標集群右側操作列下的詳情

    4. 在集群管理頁左側導航欄,選擇工作負載 > 容器組

    5. 容器組頁面,單擊目標Pod右側操作列下的更多 > 刪除

    6. 提示對話框,單擊確定

      稍等一段時間,容器重啟后配置生效。

使用DNS代理功能

步驟一:創(chuàng)建集群外服務

使用集群外服務將aliyun.com添加到服務網(wǎng)格內部維護的服務注冊表中。

  1. 登錄ASM控制臺

  2. 在左側導航欄,選擇服務網(wǎng)格 > 網(wǎng)格管理

  3. 網(wǎng)格管理頁面,找到待配置的實例,單擊實例的名稱或在操作列中單擊管理

  4. 在網(wǎng)格詳情頁面左側導航欄,選擇集群與工作負載管理 > 集群外服務(ServiceEntry),然后在右側頁面,單擊使用YAML創(chuàng)建

  5. 創(chuàng)建頁面選擇命名空間,選擇任意場景模版,將以下內容服務復制到文本框中,然后單擊創(chuàng)建

    apiVersion: networking.istio.io/v1beta1
    kind: ServiceEntry
    metadata:
     name: test1-mydnsproxying
    spec:
     hosts:
     - aliyun.com
     location: MESH_EXTERNAL
     ports:
     - number: 443
       name: https
       protocol: TLS
     resolution: DNS

步驟二:部署示例應用

  1. 獲取集群KubeConfig并通過kubectl工具連接集群

  2. 使用以下內容,創(chuàng)建名為sleep.yaml的文件。

    展開查看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: curlimages/curl
            command: ["/bin/sleep", "3650d"]
            imagePullPolicy: IfNotPresent
            volumeMounts:
            - mountPath: /etc/sleep/tls
              name: secret-volume
          volumes:
          - name: secret-volume
            secret:
              secretName: sleep-secret
              optional: true
  3. 執(zhí)行以下命令,部署Sleep應用。

    kubectl apply -f sleep.yaml
  4. 執(zhí)行以下命令,查看Sleep Pod是否成功啟動。

    kubectl get pod |grep sleep

    預期輸出:

    NAME                       READY   STATUS    RESTARTS   AGE
    sleep-66cd8f684f-nxw8v     2/2     Running   0          16m

步驟三:為Sleep容器啟用DNS代理功能

  1. 登錄容器服務管理控制臺

  2. 在控制臺左側導航欄,單擊集群

  3. 集群列表頁面,單擊目標集群名稱或者目標集群右側操作列下的詳情

  4. 在集群管理頁左側導航欄,選擇工作負載 > 無狀態(tài)

  5. 無狀態(tài)頁面目標應用右側操作列下選擇更多 > 查看Yaml

  6. 編輯 YAML對話框中spec參數(shù)下添加以下注釋,然后單擊更新

    annotations:
      proxy.istio.io/config: |
        proxyMetadata:
          ISTIO_META_DNS_CAPTURE: "true"
          ISTIO_META_DNS_AUTO_ALLOCATE: "true"

    注釋

  7. 重啟Pod,使DNS配置在Sleep應用中生效。

    1. 登錄容器服務管理控制臺

    2. 在控制臺左側導航欄,單擊集群

    3. 集群列表頁面,單擊目標集群名稱或者目標集群右側操作列下的詳情

    4. 在集群管理頁左側導航欄,選擇工作負載 > 容器組

    5. 容器組頁面,單擊Sleep容器右側操作列下的更多 > 刪除

    6. 提示對話框,單擊確定

      稍等一段時間,容器重啟后配置生效。

步驟四:驗證使用DNS代理功能是否成功

  1. 查看istio-init容器的日志。

    1. 登錄容器服務管理控制臺

    2. 在控制臺左側導航欄,單擊集群

    3. 集群列表頁面,單擊目標集群名稱或者目標集群右側操作列下的詳情

    4. 在集群管理頁左側導航欄,選擇工作負載 > 容器組

    5. 容器組頁面,單擊Sleep容器的名稱。

    6. 在容器詳情頁面單擊日志頁簽,設置容器istio-init

      可以看到以下日志。

      -A OUTPUT -p udp --dport 53 -d 192.168.0.10/32 -j REDIRECT --to-port 15053
      -A ISTIO_OUTPUT -p tcp --dport 53 -d 192.168.0.10/32 -j REDIRECT --to-ports 15053

      Sidecar代理會攔截來自應用程序容器的所有DNS查詢,攔截的方式與通過iptables規(guī)則攔截其他類型的流量相同。Istio添加了額外的iptables規(guī)則來將所有發(fā)送到Kubernetes DNS服務(例如CoreDNS服務)的端口53(TCP和UDP)上的DNS數(shù)據(jù)包重定向到端口15053。

  2. 查看pilot-agent進程監(jiān)聽的端口。

    1. 在集群管理頁左側導航欄,選擇工作負載 > 容器組

    2. 容器組頁面單擊Sleep容器右側操作列下的終端,單擊istio-proxy

    3. 在istio-proxy容器中執(zhí)行以下命令,查看pilot-agent進程監(jiān)聽的端口。

      netstat -anp |grep 15053

      預期輸出:

      tcp        0      0 127.0.0.1:15053         0.0.0.0:*               LISTEN      1/pilot-agent
      udp        0      0 127.0.0.1:15053         0.0.0.0:*                           1/pilot-agent

      DNS查詢被重定向到在Sidecar代理容器中運行的pilot-agent進程中,可以看到該進程正在監(jiān)聽端口15053。

  3. 訪問aliyun.com。

    1. 在集群管理頁左側導航欄,選擇工作負載 > 容器組

    2. 容器組頁面單擊Sleep容器右側操作列下的終端,單擊sleep

    3. 在Sleep容器中執(zhí)行以下命令,訪問aliyun.com。

      curl -v https://aliyun.com

      預期輸出:

      *   Trying 240.240.**.**:443...
      * Connected to aliyun.com (240.240.**.**) port 443 (#0)

      可以看到返回的地址是240.240.**.**,該地址是服務網(wǎng)格自動分配的虛擬IP,而不是真實的公開的IP地址。服務網(wǎng)格使用iptables劫持了對kube-dns的請求,并將請求路由到了Pod中運行的Sidecar Proxy。當應用程序Pod將aliyun.com解析為虛擬IP并發(fā)出請求時,虛擬IP將被替換為Sidecar Proxy中解析的實際公共IP地址。

為DNS代理啟用調試日志

為DNS代理和pilot-agent啟用調試日志后,pilot-agent將記錄來自應用程序容器的每個DNS查詢。

  1. 登錄容器服務管理控制臺

  2. 在控制臺左側導航欄,單擊集群

  3. 集群列表頁面,單擊目標集群名稱或者目標集群右側操作列下的詳情

  4. 在集群管理頁左側導航欄,選擇工作負載 > 無狀態(tài)

  5. 無狀態(tài)頁面目標應用右側操作列下選擇更多 > 查看Yaml

  6. 編輯 YAML對話框中spec參數(shù)下添加以下注釋,然后單擊更新

    annotations:
      sidecar.istio.io/agentLogLevel: "dns:debug"

    日志注釋

  7. 在集群中執(zhí)行以下命令,查看調試日志。

    kubectl logs -n default sleep-85fdfd8896-2ctq4 -c istio-proxy | grep debug

    展開查看預期輸出

    2022-03-28T12:15:05.064562Z    debug    dns    request ;; opcode: QUERY, status: NOERROR, id: 16390
    ;; flags: rd; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0
    
    ;; QUESTION SECTION:
    ;alibabacloud.com.default.svc.cluster.local.    IN     AAAA
        protocol=udp edns=false id=1c71c9f1-e051-49e9-8d04-d7c82ee****
    2022-03-28T12:15:05.064572Z    debug    dns    request ;; opcode: QUERY, status: NOERROR, id: 16016
    ;; flags: rd; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0
    
    ;; QUESTION SECTION:
    ;alibabacloud.com.default.svc.cluster.local.    IN     A
        protocol=udp edns=false id=4cec8078-5355-4d1b-b496-ab57367****
    2022-03-28T12:15:05.064593Z    debug    dns    response for hostname "alibabacloud.com.default.svc.cluster.local." (found=true): ;; opcode: QUERY, status: NOERROR, id: 16390
    ;; flags: qr aa rd; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0
    
    ;; QUESTION SECTION:
    ;alibabacloud.com.default.svc.cluster.local.    IN     AAAA
        protocol=udp edns=false id=1c71c9f1-e051-49e9-8d04-d7c82ee****
    2022-03-28T12:15:05.064614Z    debug    dns    response for hostname "alibabacloud.com.default.svc.cluster.local." (found=true): ;; opcode: QUERY, status: NOERROR, id: 16016
    ;; flags: qr aa rd; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0
    
    ;; QUESTION SECTION:
    ;alibabacloud.com.default.svc.cluster.local.    IN     A
    
    ;; ANSWER SECTION:
    alibabacloud.com.default.svc.cluster.local.    30    IN    CNAME    alibabacloud.com.
    alibabacloud.com.    30    IN    A    240.240.**.**
        protocol=udp edns=false id=4cec8078-5355-4d1b-b496-ab573670****
                            

    可以在日志中看到found=true,說明DNS查詢在本地注冊表中找到了域名,并將對域名進行解析。