istio的授權功能,也稱爲基於角色的訪問控制(RBAC),它爲istio服務網格中的服務提供命名空間級別、服務級別和方法級別的訪問控制。基於角色的訪問控制具有簡單易用、靈活和高性能等特性。本文介紹如何在服務網格中爲服務進行授權控制。
·前置條件·
•安裝istio的k8s集羣,啓用認證功能、雙向TLS認證
•部署bookinfo示例應用
下面基於bookinfo應用實例具體介紹如何啓用授權並配置訪問控制策略:
- 創建service accout,啓用訪問控制
我們在service account的基礎上啓用訪問控制,爲了給不同的微服務授予不同的訪問權限,需要建立不同的service account,在本例中:
創建Service account: bookinfo-productpage,並用它部署 productpage;
創建 Service account:bookinfo-reviews,並用它部署 reviews(其中包含 reviews-v2 和 reviews-v3 兩個版本)。
清理所有現存RBAC規則:
此時,用瀏覽器打開bookinfo的productpage頁面,會看到:
- 啓用Istio授權
使用 RbacConfig 對象啓用 Istio Authorization:
此時,bookinfo的productpage頁面,會看到:
- 設置命名空間級的訪問控制
這一策略創建service-viewer 的 ServiceRole,通過constraints指定了允許訪問的服務範圍:
創建 ServiceRoleBinding 對象,用來把 service-viewer 角色指派給所有 istio-system 和 default 命名空間的服務:
用瀏覽器打開bookinfo的productpage頁面,會看到完整的頁面:
- 配置服務級的訪問控制
清除命名空間級的訪問控制
下面在bookinfo中逐步爲服務加入訪問:
1) 允許到productpage服務的訪問
這條策略中創建了名稱爲 productpage-viewer的ServiceRole,它允許到 productpage 服務的讀取訪問,並創建命名爲 productpage-viewer的 ServiceRole,將 productpage-viewer 角色賦予給所有用戶和服務
此時,用瀏覽器打開bookinfo的productpage頁面,會顯示 Error fetching product details 和 Error fetching product reviews 的錯誤信息:
出現上述現象是因爲我們還沒有給productpage授權訪問details 和 reviews 服務,下面兩步修復這個問題。
2) 允許對details和reviews服務的訪問
details-reviews-viewer:允許對 details 和 reviews 服務進行只讀訪問
bind-details-review: 把 details-reviews-viewer 角色授予給productpage 服務的 Service account
3) 允許對ratings服務的訪問
ratings-viewer: 允許對ratings服務的訪問
rind-ratings: 將ratings-viewer角色指派給bookinfo-reviews這個Service account
此時,用瀏覽器打開bookinfo的productpage頁面,會看到完整的頁面。
總結:通過上述步驟,我們可以快捷的啓用授權功能,並靈活定製訪問控制策略來滿足不同的安全訪問需求。
相關服務請訪問https://support.huaweicloud.com/cce/index.html?cce_helpcenter_2019