用ServiceEntry擴展網格服務

服務入口

網關是將內部服務暴露給外部訪問,服務入口正好相反,是把外部服務納入到網格內部進行管理,主要是希望能夠管理到外部服務的請求,比如需要對訪問外部服務的請求做一些流量控制,還有就是能夠幫我們擴展我們的網格,例如我們要給多個集羣共享同一個網格(mesh)
在這裏插入圖片描述
從圖上可以看出,服務入口相當於抽象了一個外部服務,然後內部服務就像訪問網格內部的服務一樣去訪問外部服務

任務

說明:將httpbin註冊爲網格內部的服務,並配置流控策略
目標:學會通過服務入口擴展網格,掌握服務入口的配置方法

配置

因爲bookinfo服務裏,沒有帶curl這個命令,因此想要模擬內部服務去請求外部服務,需要在添加另外一個服務,官方提供了sleep這樣的服務
httpbin是一個非常精簡的測試http請求的服務
如http://httpbin.org/headers可以看到頭信息

kubectl apply -f ./samples/sleep/sleep.yaml
kubectl exec -it sleep-f8cbf5b76-8fz8g -c sleep curl  http://httpbin.org

關閉出流量訪問權限
outboundTrafficPolicy=REGISTER_ONLY
本來是ALLOW_ANY
istio中默認所有的網格內的服務,是允許直接訪問外部服務的,所以我們先關閉到允許訪問外部服務的方式,設置成只有註冊過的服務才能訪問外部服務

kubectl get configmap istio -n istio-system -o yaml | sed 's/mode: ALLOW_ANY/mode: REGISTER_ONLY/g' |kubectl replace -n istio-system -f -

這樣的話發現在服務內部無法訪問外部
然後定義一個服務入口,讓sleep服務可以通過服務入口訪問外部服務

apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
  name: httpbin-ext
spec:
  hosts: 外部服務的服務域名
  - httpbin.org
  ports: 定義具體的訪問這個服務的協議及端口
  - number: 80
    name: http
    protocol: HTTP
  location: MESH_EXTERNAL 定義網格外部還是內部
  resolution: DNS 服務發現的機制,通過dns發現

[root@vms30 ~] kubectl get se
NAME          HOSTS           LOCATION        RESOLUTION   AGE
httpbin-ext   [httpbin.org]   MESH_EXTERNAL   DNS          27s

發現又可以訪問了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章