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

使用ASM跨集群網(wǎng)格代理實(shí)現(xiàn)多集群跨網(wǎng)絡(luò)互通

更新時(shí)間:

阿里云ASM支持將多個(gè)ACK集群整合在一個(gè)ASM實(shí)例中,為分布廣泛的服務(wù)提供統(tǒng)一的管理和運(yùn)維平臺(tái)。ASM跨集群網(wǎng)格代理提供了更為靈活的多集群網(wǎng)絡(luò)互聯(lián)方案,本文將介紹如何在多集群場(chǎng)景下利用跨集群網(wǎng)格代理打通集群通信。

背景信息

ASM支持多集群模式,即用戶可以在同一個(gè)ASM實(shí)例中加入多個(gè)ACK集群。 您可以在ASM中加入多個(gè)不同網(wǎng)絡(luò)下的ACK集群,若多集群的網(wǎng)絡(luò)不具備打通三層網(wǎng)絡(luò)的條件(設(shè)施限制、CIDR沖突、費(fèi)用等原因),則可以利用ASM網(wǎng)關(guān)打通集群網(wǎng)絡(luò),使用ASM跨集群網(wǎng)格代理可以靈活使用公、私有網(wǎng)絡(luò)將集群網(wǎng)絡(luò)聯(lián)通,無(wú)感解決地址沖突問題,實(shí)現(xiàn)多集群統(tǒng)一的流量治理、安全防護(hù)以及全鏈路可觀測(cè)。本文將以Sleep應(yīng)用跨集群訪問httpbin為例介紹如何在ASM環(huán)境下利用跨集群網(wǎng)格代理配置跨網(wǎng)絡(luò)多集群互通。

image

能力優(yōu)勢(shì)

ASM 1.22及以上版本提供的跨集群網(wǎng)格代理完整實(shí)現(xiàn)了七層客戶端負(fù)載均衡,跨集群調(diào)用場(chǎng)景下,所有路由能力與非跨集群負(fù)載均衡完全對(duì)齊。

前提條件

  • 已創(chuàng)建ASM實(shí)例,版本不低于1.22。具體操作,請(qǐng)參見創(chuàng)建ASM實(shí)例

  • 已添加多個(gè)集群到ASM實(shí)例。具體操作,請(qǐng)參見添加集群到ASM實(shí)例。(本文示例為兩個(gè))。

  • 已開啟ASM自動(dòng)注入。具體操作,請(qǐng)參見啟用自動(dòng)注入

  • 服務(wù)之間跨集群訪問需要滿足以下兩個(gè)條件之一:

    • 開啟了ASM的在ASM中使用DNS代理(推薦)。

    • 手動(dòng)在客戶端所在的集群創(chuàng)建一個(gè)和服務(wù)端集群相同的目標(biāo)Service。

步驟一:為ASM控制面綁定公網(wǎng)IP

為了使與ASM實(shí)例不在同一網(wǎng)絡(luò)的集群中的數(shù)據(jù)平面組件可以正確地連接到ASM控制平面,需要為ASM控制平面Pilot使用的SLB實(shí)例綁定EIP,以將Pilot暴露于公網(wǎng)。

  1. 登錄ASM控制臺(tái),在左側(cè)導(dǎo)航欄,選擇服務(wù)網(wǎng)格 > 網(wǎng)格管理

  2. 網(wǎng)格管理頁(yè)面,單擊目標(biāo)實(shí)例名稱,然后在左側(cè)導(dǎo)航欄,選擇網(wǎng)格實(shí)例 > 基本信息

  3. 基本信息頁(yè)面右側(cè),找到Istio Pilot 地址并單擊綁定EIP

說(shuō)明

綁定EIP到Pilot負(fù)載均衡后,若刪除ASM實(shí)例時(shí)未解除綁定,EIP將隨ASM實(shí)例釋放。

步驟二:為集群指定網(wǎng)絡(luò)配置,并啟用跨集群網(wǎng)格代理

您可以為每個(gè)集群指定一個(gè)邏輯網(wǎng)絡(luò)。同一個(gè)邏輯網(wǎng)絡(luò)之間的服務(wù)可以直接互相訪問,不同邏輯網(wǎng)絡(luò)之間的服務(wù)需要通過跨集群網(wǎng)格代理才可以訪問。

  1. 登錄ASM控制臺(tái),在左側(cè)導(dǎo)航欄,選擇服務(wù)網(wǎng)格 > 網(wǎng)格管理

  2. 網(wǎng)格管理頁(yè)面,單擊目標(biāo)實(shí)例名稱,然后在左側(cè)導(dǎo)航欄,選擇集群與工作負(fù)載管理 > Kubernetes集群

  3. 單擊多集群網(wǎng)絡(luò)配置按鈕,參考如下方式配置多集群網(wǎng)絡(luò)。

    • 為ACK-1指定所屬邏輯網(wǎng)絡(luò)為network1。

    • 為ACK-2指定所屬邏輯網(wǎng)絡(luò)為network2,并且在ACK-2中啟用跨集群網(wǎng)格代理訪問

    image

應(yīng)用上述配置后,ASM會(huì)為您在ACK-2中創(chuàng)建一個(gè)默認(rèn)跨集群網(wǎng)格代理,該網(wǎng)關(guān)具有公網(wǎng)IP。ACK-1中的服務(wù)將會(huì)自動(dòng)通過這個(gè)跨集群網(wǎng)格代理訪問到ACK-2中的服務(wù),并且這條鏈路默認(rèn)會(huì)啟用mTLS加密。

您可以通過ASM集群的kubeconfig查看跨集群網(wǎng)格代理的定義,跨集群網(wǎng)格代理有一個(gè)特殊的名稱:asm-cross-network-${ACK ID}。您可以根據(jù)自己的需求,自行調(diào)節(jié)網(wǎng)關(guān)的資源和副本數(shù)等配置。

說(shuō)明

目前跨集群網(wǎng)格代理是一個(gè)TCP Proxy,無(wú)法進(jìn)行L7負(fù)載均衡。可能在某些情況下存在負(fù)載不均衡的情況。

步驟三:驗(yàn)證跨集群訪問

上述步驟中的網(wǎng)絡(luò)配置需要在業(yè)務(wù)Pod啟動(dòng)時(shí)生效。如果修改網(wǎng)絡(luò)配置之前已經(jīng)啟動(dòng)了業(yè)務(wù)Pod,則需要重啟業(yè)務(wù)Pod。

  1. 在ACK-1中創(chuàng)建Sleep應(yīng)用,示例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: registry.cn-hangzhou.aliyuncs.com/acs/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. 在ACK-2中創(chuàng)建httpbin應(yīng)用,示例YAML配置如下:

    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: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/httpbin:0.1.0
            imagePullPolicy: IfNotPresent
            name: httpbin
            ports:
            - containerPort: 80
  3. 從Sleep對(duì)應(yīng)的Pod中訪問httpbin應(yīng)用(使用ACK-1的kubeconfig)。

    1. 獲取Sleep Pod名稱。

      kubectl get pod | grep sleep
    2. 在Sleep中使用curl訪問httpbin。

      kubectl exec ${sleep pod名稱} -- curl httpbin:8000/status/418

      此時(shí)可以看到訪問成功,輸出如下所示:

        % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                       Dload  Upload   Total   Spent    Left  Speed
      100   135  100   135    0     0  16075      0 --:--:-- --:--:-- --:--:-- 16875
      
          -=[ teapot ]=-
      
             _...._
           .'  _ _ `.
          | ."` ^ `". _,
          \_;`"---"`|//
            |       ;/
            \_     _/
              `"""`
  4. 驗(yàn)證Sleep通過跨集群網(wǎng)格代理訪問了httpbin。

    1. 查看Sleep Pod的日志(使用ACK-1的kubeconfig)。

      kubectl logs ${sleep pod名稱} -c istio-proxy | tail -1

      輸出如下所示:

      {"authority_for":"httpbin:8000","bytes_received":"0","bytes_sent":"135","downstream_local_address":"xxx.xxx.xxx.xx:8000","downstream_remote_address":"xx.x.xxx.xxx:xxxxx","duration":"7","istio_policy_status":"-","method":"GET","path":"/status/418","protocol":"HTTP/1.1","request_id":"08dc43e9-60c8-4f2f-910a-b727172ce311","requested_server_name":"-","response_code":"418","response_flags":"-","route_name":"default","start_time":"2024-05-23T10:06:27.289Z","trace_id":"-","upstream_cluster":"outbound|8000||httpbin.default.svc.cluster.local","upstream_host":"xxx.xx.xxx.xxx:15443","upstream_local_address":"xx.x.xxx.xxx:60248","upstream_response_time":"7","upstream_service_time":"7","upstream_transport_failure_reason":"-","user_agent":"curl/8.1.2","x_forwarded_for":"-"}

      其中的upstream_host字段標(biāo)識(shí)Sleep Pod直接訪問的目標(biāo),可以看到訪問的端口是1544315443是跨集群網(wǎng)格代理專用的端口。

    2. 查看跨集群網(wǎng)格代理的日志(使用ACK-2的kubeconfig)。

      首先獲取跨集群網(wǎng)格代理Pod。

      kubectl -n istio-system get pod | grep asm-cross-network
      
      istio-asm-cross-network-c0859be51XXX   1/1     Running   0          20h
      istio-asm-cross-network-c0859be51XXX   1/1     Running   0          20h

      可以看到默認(rèn)有兩個(gè)跨集群網(wǎng)格代理的Pod。您可以分別查看這兩個(gè)Pod的日志,可以看到類似的訪問日志。

       kubectl logs istio-asm-cross-network-c0859be51XXX -n istio-system  | tail -1
      
      {"authority_for":"-","bytes_received":"xxxx","bytes_sent":"xxxx","downstream_local_address":"xx.xx.x.xx:15443","downstream_remote_address":"xx.xx.xx.xx:xxxxx","duration":"1568569","istio_policy_status":"-","method":"-","path":"-","protocol":"-","request_id":"-","requested_server_name":"outbound_.8000_._.httpbin.default.svc.cluster.local","response_code":"0","response_flags":"-","route_name":"-","start_time":"2024-05-23T08:41:16.618Z","trace_id":"-","upstream_cluster":"outbound_.8000_._.httpbin.default.svc.cluster.local","upstream_host":"xx.xx.xx.xxx:80","upstream_local_address":"xx.x.xx.xx:xxxxx","upstream_response_time":"-","upstream_service_time":"-","upstream_transport_failure_reason":"-","user_agent":"-","x_forwarded_for":"-"}