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

溫馨提示×

溫馨提示×

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

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

Istio如何使用相同的端口訪問網格外服務

發布時間:2020-04-09 21:49:34 來源:網絡 閱讀:746 作者:容器魔方 欄目:云計算

1.1、背景

寫這篇文章的目的是為了說明以下問題:如何使用TCP協議相同的端口訪問網格外多個服務? 這是最近直播的時候有一個同學提出的,當時我沒有完全明白,“訪問多集群” 的意思。后來仔細思考了一下,問題應該就是Istio服務網格內如何通過相同的協議,端口訪問不同的服務。

1.2、使用場景

肯定會有人回答,既然相同的端口不能使用,何不換一個端口呢,這樣做也是一種解決方法。我在想有一些場景一定沒法或者不方便繞過去。

1) 假如同一個網格內部署了生產,測試,開發三套環境,都需要通過3306端口訪問對應環境的mysql數據庫。

2) 假如同一個網格內部署了生產,測試,開發三套環境,都需要通過6379端口訪問對應環境的redis

在微服務盛行的今天,往往需要團隊之間協作,沒辦法保證所有的微服務都運行在同一服務網格內。尤其是中間件服務,作為公司公共服務,一定是業務共享的。既然我們不可避免的需要使用相同的端口,訪問外部服務,接下來告訴大家兩種方案解決以上問題。

1.3、解決方案

通過相同的端口443訪問 https://github.com 和 https://www.huaweicloud.com,從網格內訪問外部服務,需要分別創建對應的ServiceEntentry:

1) www.huaweicloud.com

cat <<EOF | kubectl apply -f -

apiVersion: networking.istio.io/v1alpha3

kind: ServiceEntry

metadata:

name: hwcloud

spec:

hosts:

  • www.huaweicloud.com

    ports:

  • number: 443

    name: tcp

    protocol: TCP

    resolution: DNS

    location: MESH_EXTERNAL

EOF

2) github.com

cat <<EOF | kubectl apply -f -

apiVersion: networking.istio.io/v1alpha3

kind: ServiceEntry

metadata:

name: github

spec:

hosts:

  • github.com

    ports:

  • number: 443

    name: tcp

    protocol: TCP

    resolution: DNS

    location: MESH_EXTERNAL

EOF

兩條規則建好之后,等待pilot將新的配置下發到所有的proxy,我們通過sleep pod驗證連通性

$ kubectl exec sleep-754684654f-trpt2 -- curl -sL -o /dev/null https://www.huaweicloud.com –v

< HTTP/1.1 200 OK

< Server: NWSs

< Date: Fri, 21 Dec 2018 02:23:11 GMT

< Content-Type: text/html;charset=utf-8

< Content-Length: 703122

< Connection: keep-alive

< Cache-Control: public, max-age=600

< Expires: Fri, 21 Dec 2018 02:33:10 GMT

< Last-Modified: Thu, 20 Dec 2018 10:30:00 GMT

< X-NWS-LOG-UUID: 0d13017f-8767-4399-a509-6c11b2a9f3d0

< Access-Control-Allow-Origin: *

< dl-from: qcloud

< X-Cache-Lookup: Hit From Disktank3

< X-Via: LIANTONG-HENAN_171(200:hit)

<

{ [15930 bytes data]

  • Connection #0 to host www.huaweicloud.com left intact

kubectl exec sleep-754684654f-trpt2 -- curl -sL -o /dev/null https://github.com –v -k

< HTTP/1.1 404 Not Found

< Server: NWSs

< Date: Fri, 21 Dec 2018 02:29:26 GMT

< Content-Type: text/html

< Content-Length: 52

< Connection: keep-alive

< X-NWS-LOG-UUID: b283fee3-89e0-48bc-8d6e-0c3a68ecc4bf

< X-Via: LIANTONG-HENAN_25(404:hit)

<

{ [52 bytes data]

  • Connection #0 to host github.com left intact

由此可見可以在網格內部訪問https://www.huaweicloud.com,但是不可以訪問https://github.com. 這里有一個原因是istio會將ServiceEntry規則按照創建時間排序,創建時間較早的優先級高,所以先創建的 hwcloud ServiceEntry生效。

可以查看sleep pod上的配置來確認:listener配置只有到華為云的cluster"outbound|443||www.huaweicloud.com"

$ istioctl pc listener sleep-754684654f-trpt2 --address=0.0.0.0 --port=443 -ojson

[

{

    "name": "0.0.0.0_443",

    "address": {

        "socketAddress": {

            "address": "0.0.0.0",

            "portValue": 443

        }

    },

    "filterChains": [

        {

            "filters": [

                {

                    "name": "mixer",

                     …

                },

                {

                    "name": "envoy.tcp_proxy",

                    "config": {

                        "access_log": [

                            {

                              …

                            }

                        ],

                        "cluster": "outbound|443||www.huaweicloud.com",

                        "stat_prefix": "outbound|443||www.huaweicloud.com"

                    }

                }

            ]

        }

    ],

    …

}

]

為了同時訪問兩者,這里我提供兩種方法:

1.3.1創建ServiceEntry時指定Address

查詢www.huaweicloud.com域名綁定的ip地址,選擇一個或者多個更新hwcloud ServiceEntry

Istio如何使用相同的端口訪問網格外服務

同樣的方法更新 github

Istio如何使用相同的端口訪問網格外服務

驗證https://www.huaweicloud.com和https://github.com均可以從網格內訪問,因為指定了spec.addresses 后,pilot生成listener使就會使用指定的ip地址代替‘0.0.0.0’的全匹配方式。

Istio如何使用相同的端口訪問網格外服務

雖然著這種方式一定程度上可以解決同一端口訪問外部服務的需求。但是由于需要提前設置ip地址,所以在ip經常變動的場景下缺少靈活性。下面提供一種更靈活的方法。

1.3.2 指定ServiceEntry的作用域

Istio社區最近實現了網絡的配置作用域特性:https://github.com/istio/istio/pull/10287, 允許用戶設置相應規則的作用域范圍。

目前 ServiceEntry,VirtualService,Gateway, DestinationRule等都可以通過spec.configScope設置作用范圍。ConfigScope 可以設置為"PUBLIC","PRIVATE"類型。

"PUBLIC" 表示規則對網格內所有的工作負載可見,這也是默認值。

"PRIVATE" 表示規則僅對同一namespace下面的工作負載可見。

因此可以利用ConfigScope將github以及hwcloud都設置成PRIVATE,分別創建在兩個不同的namespace下面。這樣也可以做到ns1內的工作負載訪問https://github.com, ns2內的工作負載訪問https://www.huaweicloud.com .

cat <<EOF | kubectl apply -f -

apiVersion: networking.istio.io/v1alpha3

kind: ServiceEntry

metadata:

name: github

namespace: ns1

spec:

hosts:

  • github.com

    ports:

  • number: 443

    name: tcp

    protocol: TCP

    resolution: DNS

    location: MESH_EXTERNAL

    configScope: PRIVATE

EOF

cat <<EOF | kubectl apply -f -

apiVersion: networking.istio.io/v1alpha3

kind: ServiceEntry

metadata:

name: hwcloud

namespace: ns2

spec:

hosts:

  • www.huaweicloud.com

    ports:

  • number: 443

    name: tcp

    protocol: TCP

    resolution

向AI問一下細節

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

AI

万宁市| 紫阳县| 化隆| 浮梁县| 昂仁县| 定日县| 古田县| 灵丘县| 乌拉特后旗| 贵南县| 柳河县| 蓬溪县| 海淀区| 通河县| 上饶市| 项城市| 慈利县| 长顺县| 麟游县| 汾西县| 临西县| 新竹市| 祥云县| 清镇市| 东兰县| 龙泉市| 澳门| 富民县| 聂荣县| 华坪县| 宁远县| 黄浦区| 绥江县| 石楼县| 锦州市| 丹东市| 宁武县| 新郑市| 姚安县| 称多县| 任丘市|