2017-09-14 66 views
1

試圖找到阻止使用Istio從互聯網到k8s服務的任何連接的最佳方式。使用Istio阻止從ANY到服務的傳入連接

從Istio的政策中,最佳選擇是什麼?

混合機 - 拒絕或列表 先導 - 路由規則 - 如注射中止故障(400)或目的的策略 - 諸如斷路(最大連接0 ???)

嘗試了上述所有但沒有任何工作,並且其中很少人不太直觀地配置(並且沒有很好的記錄)。

明白,如果一個工作示例將附着

以下是Injecting HTTP fault policy一個例子。

destination: "ratings.default.svc.cluster.local" 
route: 
- tags: 
    version: 
httpFault: 
    abort: 
    percent: 100 
    httpStatus: 400 
httpStatus: 400 

首先,Ist​​io要求輸入 「類型」:

Error: Istio doesn't have configuration type , the types are destination-policy, ingress-rule, route-rule

手動添加類型後:

type: route-rule 
destination: "ratings.default.svc.cluster.local" 
route: 
- tags: 
    version: 
httpFault: 
    abort: 
    percent: 100 
    httpStatus: 400 

它呼喊有關方法:

I0914 17:44:32.417839 1003 request.go:991] Response Body: 405: Method Not Allowed Error: the server does not allow this method on the requested resource

謝謝

回答

0

發現,Istio的路由規則只適用在兩個連接的端點(客戶端吊艙和服務器POD),配備與特使。

這本身就是應該進一步調查的東西,因爲它沒有任何意義。

來自集羣外部的流量確實需要通過入口進行控制。

0

最簡單的方法應該是在您的配置中使用istio auth並且無入口。

這樣,你得到2層保護:

  1. 你的服務是不可路由的(沒有外部IP地址)

  • 甚至如果互聯網流量確實設法擊中了您的服務,則流量將被拒絕,因爲它不提供istio服務CERT /由您的istio簽名CA
  • +0

    上述兩種方法都適用於某些環境或設置。我目前正在考慮應用「ad-hock」技術,使用已部署的環境即時應用塊,這種環境不容易添加新功能(除非已部署)。 – Zvika

    +0

    當您知道誰是您的客戶或服務激活使用情況時,Istio身份驗證方法將是完美的。當你想廣泛暴露你的服務時,auth將不適合。 – Zvika

    +0

    爲了廣泛公開您的服務,您需要爲您想要公開的內容添加入口,並在其上設置Istio混音器規則以限制訪問 –

    2

    如果您只是試圖阻止外部流量到您的服務,那麼路由規則(故障注入)不是正確的方法。您應該通過不將其暴露在入口中來阻止它。 https://istio.io/v-0.1/docs/tasks/ingress.html

    這就是說,你試圖設置路由規則時出現錯誤的原因是你的yaml格式錯誤。像這樣的東西是什麼istioctl coammand預計:

    type: route-rule 
    name: ratings-block 
    spec: 
        destination: "ratings.default.svc.cluster.local" 
        route: 
        - tags: 
         version: v1 
        httpFault: 
        abort: 
         percent: 100 
         httpStatus: 400 
    

    在這裏看到的例子:https://istio.io/v-0.1/docs/tasks/request-routing.html

    0

    Istio擁有網格內部/外部的概念。網格內的每個服務都有一個sidecar代理,它們的流量受到路由規則的限制。來自網格外部的每件事都需要經過Ingress。 Ingress本身是一個網狀服務(代理)。