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

溫馨提示×

溫馨提示×

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

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

idou老師教你學Istio 16:如何用 Istio 實現微服務間的訪問控制

發布時間:2020-03-31 10:49:57 來源:網絡 閱讀:91 作者:容器魔方 欄目:云計算

摘要
使用 Istio 可以很方便地實現微服務間的訪問控制。本文演示了使用 Denier 適配器實現拒絕訪問,和 Listchecker 適配器實現黑白名單兩種方法。

使用場景

有時需要對微服務間的相互訪問進行控制,比如使滿足某些條件(比如版本)的微服務能夠(或不能)調用特定的微服務。

訪問控制屬于策略范疇,在 Istio 中由 Mixer 組件實現。

idou老師教你學Istio 16:如何用 Istio 實現微服務間的訪問控制

Mixer拓撲圖,來源官方文檔

如上圖所示,服務的外部請求會被 Envoy 攔截,每個經過 Envoy 的請求都會調用 Mixer,為 Mixer 提供一組描述請求和請求周圍環境的屬性。Mixer 進行前置條件檢查和配額檢查,調用相應的 adapter 做處理,并返回相應結果。Envoy分析結果,決定是否執行請求或拒絕請求。從而實現了策略控制。

環境準備

在 Kubernetes 集群上部署 Istio

部署 Bookinfo 示例應用

配置 Bookinfo 應用各個微服務的 destinationrule 和 virtualservice。其中 reviews 服務的 destinationrule 和 virtualservice 配置如下:

idou老師教你學Istio 16:如何用 Istio 實現微服務間的訪問控制

idou老師教你學Istio 16:如何用 Istio 實現微服務間的訪問控制

按上圖配置后,對于 reviews 服務的請求,來自用戶 “kokokobe” 的請求會被路由到v2 版本,其他用戶的請求會被路由到 v3 版本。

使用 Denier 適配器實現簡單的訪問控制

使用 Istio 對微服務進行訪問控制時,可以使用 Mixer 中的任何屬性。這是一種簡單的訪問控制,實現基礎是通過 Mixer 選擇器拒絕某些條件下的請求。

比如,上文所述的 Bookinfo 應用中的 ratings 服務會被多個版本的 reviews 服務訪問。下面的示例中我們將會切斷來自 v3 版本的 reviews 服務對 ratings 服務的調用。

  1. 用瀏覽器打開 Bookinfo 的 productpage(http://$GATEWAY_URL/productpage)

idou老師教你學Istio 16:如何用 Istio 實現微服務間的訪問控制

如上圖所示,如果用 “kokokobe” 的用戶登錄,能看到每條 review 下面的黑色星星,說明此時 ratings 服務被 v2 版本的 reviews 服務調用。

idou老師教你學Istio 16:如何用 Istio 實現微服務間的訪問控制

idou老師教你學Istio 16:如何用 Istio 實現微服務間的訪問控制

從上面兩張圖可以看出,如果使用其他用戶登錄(或未登錄),能看到每條 review 下面的紅色星星,說明此時 ratings 服務被 v3 版本的 reviews 服務調用。

  1. 創建 denier 適配器,拒絕來自 v3 版本的 reviews 服務對 ratings 服務的調用

編輯 mixer-rule-deny-label.yaml 內容如下:

idou老師教你學Istio 16:如何用 Istio 實現微服務間的訪問控制

這也是Mixer的adapter的標準配置格式,一般需要配置三種類型的資源:

  1. 配置一組 handler。Handler是配置好的 adapter 的實例,adapter 封裝了 Mixer 和特定基礎設施后端之間的接口。

  2. 基于 template 配置一組 instance。Instance 定義了如何將 Envoy 提供的請求屬性映射到 adapter 的輸入。

  3. 配置一組規則。這些規則描述了何時調用特定的 handler 及 instance。

在這里其中定義了一條名為 denyreviewsv3 的規則,一個 denier 類型的 handler,一個checknothing 類型的模板的實例。

在 denyreviewsv3 規則中,方框內的條件表達式匹配的條件是:來自 reviews 服務,version 為 v3 ,目標為 ratings 服務的請求。這條規則使用 denier 適配器拒絕來自 v3 版本的 reviews 服務的請求。

這個 denier 適配器會拒絕符合上述規則的請求。可以預先指定 denier 適配器的狀態碼和消息,如方框中所示。

然后執行如下命令創建上述規則的 denier 適配器:

idou老師教你學Istio 16:如何用 Istio 實現微服務間的訪問控制

  1. 在瀏覽器中刷新 productpage 頁面

如果已經登出或者使用不是 “kokokobe” 的用戶身份登錄,不再看到紅色星星,因為v3版本的 reviews 服務對 ratings 服務的訪問已經被拒絕了。

idou老師教你學Istio 16:如何用 Istio 實現微服務間的訪問控制

idou老師教你學Istio 16:如何用 Istio 實現微服務間的訪問控制

相反,如果使用 “kokokobe” 用戶登錄,仍然能夠看到黑色星星。因為該用戶使用的是 v2 版本的 reviews 服務,不符合拒絕的條件。

通過listchecker適配器實現黑白名單

Istio 也支持基于屬性的黑名單和白名單。下面的白名單配置和上一節的 denier 配置是等價的,拒絕來自 v3 版本的 reviews 服務的請求。

  1. 刪除上一節配置的 denier 規則

idou老師教你學Istio 16:如何用 Istio 實現微服務間的訪問控制

  1. 在登出狀態下瀏覽 Bookinfo 的 productpage(http://$GATEWAY_URL/productpage)

此時能看到紅星圖標。在完成下述步驟之后,只有在使用 “kokokobe” 的身份登錄之后才能看到星形圖標。

  1. 創建包含 v2 版本白名單的 listchecker 適配器

編輯 whitelist-handler.yaml 內容如下:

idou老師教你學Istio 16:如何用 Istio 實現微服務間的訪問控制

通常會在外部維護黑白名單的列表,然后指定 providerUrl 參數進行異步獲取。在這個例子中,我們使用 overrides 字段提供一個靜態的黑白名單列表。

然后運行如下命令創建 listchecker 適配器:

idou老師教你學Istio 16:如何用 Istio 實現微服務間的訪問控制

  1. 創建一個 listentry 模板的實例

Listentry 模板可以用來判別一個字符串是否存在于一個列表中,本例中我們使用它來判別版本標簽是否存在于白名單中。

編輯 appversion-instance.yaml 內容如下:

idou老師教你學Istio 16:如何用 Istio 實現微服務間的訪問控制

然后運行如下命令:

idou老師教你學Istio 16:如何用 Istio 實現微服務間的訪問控制

  1. 為 ratings 服務啟用 whitelist 檢查功能

編輯 checkversion-rule.yaml 內容如下:

idou老師教你學Istio 16:如何用 Istio 實現微服務間的訪問控制

然后運行如下命令:

idou老師教你學Istio 16:如何用 Istio 實現微服務間的訪問控制

  1. 在瀏覽器中刷新 productpage 頁面

如果已經登出或者使用不是 “kokokobe” 的用戶身份登錄,看不到星形圖標;如果使用 “kokokobe” 用戶登錄,仍然能夠看到黑色星星。

總結

通過上述示例,可以發現使用 Istio 實現微服務間的訪問控制非常方便。既可以使用denier 適配器實現簡單的訪問控制,也可以通過listchecker 適配器實現較復雜的黑白名單。

相關服務請訪問https://support.huaweicloud.com/cce/index.html?cce_helpcenter_2019

向AI問一下細節

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

AI

苏州市| 永定县| 赣州市| 马龙县| 香格里拉县| 腾冲县| 双鸭山市| 扎鲁特旗| 屯留县| 宜宾县| 调兵山市| 光泽县| 焉耆| 额敏县| 平邑县| 富阳市| 南丹县| 泸定县| 江孜县| 鄂托克旗| 砀山县| 玛曲县| 文化| 商洛市| 镇宁| 达拉特旗| 西乌珠穆沁旗| 南康市| 青阳县| 乐东| 临澧县| 淄博市| 武安市| 蒙山县| 承德市| 乃东县| 黄浦区| 泸定县| 新昌县| 寿宁县| 剑河县|