中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

不同k8s集群間服務怎么相互訪問

發布時間:2023-04-13 18:00:49 來源:億速云 閱讀:137 作者:iii 欄目:開發技術

本文小編為大家詳細介紹“不同k8s集群間服務怎么相互訪問”,內容詳細,步驟清晰,細節處理妥當,希望這篇“不同k8s集群間服務怎么相互訪問”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

    1 | 春天來了一個需求

    1.1 | 現狀

    • 不同工程團隊有各自的 k8s 開發集群, 負責的服務部署在各自的集群上

    • 但是這些服務之間存在調用關系(單項或者雙向的)

    • 不同 k8s 集群之間內網是聯通的

    • 其中一個集群要作為流量入口,面向用戶

    不同k8s集群間服務怎么相互訪問

    1.2 | 需求

    • 實現服務跨集群訪問

    • 服務之間只能通過內網調用

    • 統一的外部流量接入控制

    2 | 方案有挺多的

    跨集群訪問,應該是一個比較普遍的需求,市面上有很多各種各樣的方案。比如:

    • 跨集群的注冊發現服務 比如使用 nacos 作為跨集群的注冊發現中間件,所有在不同集群里的服務都注冊到 nacos 上,由 nacos 來進行服務的注冊發現以及負載均衡

    • 配置集群內網SLB 每一個集群各自配置一個自己的內網 SLB 地址,通過 ingress 的 path 配置不同的路由轉發。

    • 使用ExternalName Service 在 請求發起方集群 配置 跨集群服務 在 本集群的 service,type 為 ExternalName 的headless service。

    方案優點缺點
    跨集群的注冊發現服務無需額外運維要求要求所有服務使用同一套注冊發現服務,限制比較強,且注冊發現服務不一定滿足不同技術棧的團隊,比如 nacos 就沒有官方支持的 go sdk
    配置集群內網SLB對調用方友好,無需在調用方做額外運維配置,只需要正常業務代碼內調用即可對集群運維要求較高,需要有一定的運維知識,且如果沒有現成的 SLB 組件,還需要自建,成本較高
    使用ExternalName Service適用范圍最廣,使用最靈活,可以在任何階段進行配置改造,對跨集群服務支持的調用方式兼容性好(支持 ClusterIP, NodePort 以及域名調用)對本方集群運維能力要求高

    以上三種方案,都可以實現跨集群的服務調用。然而,方案三卻是目前最符合現狀且能推進下去的。所以,下面就方案三展開來說。

    3 | 展開來講講

    方案三用到了 k8s 的 ExternalName Service(這里不展開講這是什么,感興趣可以點擊查看)。主要講怎么用。下面分幾個場景來講解:

    3.1 | 場景 1

    假設:k8s2 集群有個服務 s2, 對外以 Ingress 方式提供服務,訪問地址是: abc.com 調用方集群創建一個 service :

    apiVersion: v1
    kind: Service
    metadata:
      name: k8s2-s2
      namespace: prod
    spec:
      type: ExternalName
      externalName: abc.com
      ports:
      - name: http
        port: 80
        protocol: TCP
        targetPort: 80

    那么, 在調用方集群內的服務,就可以通過本集群的服務名(k8s2-s2.prod.svc.cluster.local)去訪問跨集群的服務。

    3.2 | 場景 2

    假設:k8s3 集群有個服務 s3, 對外以 NodePort 方式提供服務,訪問地址是:192.168.0.199:30099 按照場景 1 的配置生成一個 service,可以用么?

    apiVersion: v1
    kind: Service
    metadata:
      name: k8s3-s3
      namespace: prod
    spec:
      type: ExternalName
      externalName: 192.168.0.199
      ports:
      - name: http
        port: 80
        protocol: TCP
        targetPort: 30099

    可以用,但是有問題。在 nginx 的日志里會瘋狂打印一個錯誤:找不到 192.168.0.199 這個域名對應的 ip。原因是,在集群看來, externalName 字段是一個域名,是需要做 dns 解析成 ip 的。如果我們直接填一個 ip 的字段,雖然能用,但是會瘋狂輸出日志,沖掉正常 nginx 請求的日志。

    那既然這樣,改成域名調用唄。那么問題來了,對方給我一個 ip,我上哪去變一個域名呢?修改 hosts,準確的說,修改 k8s coredns 服務的 hosts:

    # kubectl -n kube-system edit cm coredns
    apiVersion: v1
    data:
      Corefile: |
        .:53 {
            ...
            hosts {
                192.168.0.199 s3.k8s3 
                fallthrough
            }
            ...
        }
    kind: ConfigMap
    metadata:
      name: coredns
      namespace: kube-system

    然后修改 service

    apiVersion: v1
    kind: Service
    metadata:
      name: k8s3-s3
      namespace: prod
    spec:
      type: ExternalName
      externalName: s3.k8s3
      ports:
      - name: http
        port: 80
        protocol: TCP
        targetPort: 30099

    此時,在調用方集群內的服務,就可以通過本集群的服務名(k8s3-s3.prod.svc.cluster.local)去訪問跨集群的服務。

    讀到這里,這篇“不同k8s集群間服務怎么相互訪問”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    k8s
    AI

    扎囊县| 昭苏县| 丰都县| 汉沽区| 菏泽市| 岢岚县| 横山县| 济南市| 呼伦贝尔市| 成安县| 隆德县| 达拉特旗| 江安县| 抚顺县| 东安县| 集安市| 紫云| 沙雅县| 九江县| 化隆| 宝丰县| 千阳县| 南和县| 平利县| 遵义县| 平罗县| 织金县| 随州市| 滕州市| 临猗县| 板桥市| 兴义市| 集贤县| 那曲县| 东兰县| 北流市| 成安县| 南漳县| 蛟河市| 崇州市| 偏关县|