2017-03-03 49 views
0

我工作的一個Kubernetes部署具有以下屬性:如何爲Kubernetes服務提供跨多個子網的裸機靜態地址?

  • 集羣是在我們自己的裸機機器上運行(不象GCE或AWS雲服務供應商)
  • 工人機跨越多個子網

出於安全考慮,我們希望做到以下幾點:

  • 引腳到只能在町計劃的某些服務尤其是子網NES(這是很簡單的,我們已經找到了如何做到這一點)
  • 對於那些需要接受從其它子網中運行的服務的通信,以某種方式固定地址(或者服務的IP,端口,或兩者)的服務。然後,在我們的路由器上靜態配置ACL以僅允許這些通信。

我見過一對夫婦的方法建議,但據我所知,他們都功虧一簣以某種方式。它們是:

  • 使用LoadBalancer。這不會起作用,因爲負載均衡器目前僅支持GCE或AWS負載均衡
  • 使用NodePorts。這是行不通的,因爲據我所知,有沒有辦法來指示Kubernetes到只有機器的特定子集(在我們的情況下,在同一個子網中的服務機)偵聽端口和流量轉發到上該服務(使所有子網中的所有計算機監聽和轉發通信都不可行的原因是,我們無法提前知道服務實例將調度到哪個IP地址/端口,因此無法靜態配置我們的路由器上的ACL)。
  • 使用External IPs。這可能與可行性最接近,但要求給定子網中需要接受來自該子網之外的服務的連接的服務數不超過子網中的IP數。

有沒有解決這個問題,我很想念的一些其他的方式?編寫自定義軟件來解決這個問題是一種選擇,但如果可能的話,我們希望避免這種情況。

+0

「_How給予Kubernetes服務上跨多個子網裸機靜態地址_?」這個問題並沒有真正意義。地址只在一個網絡中,而不是在多個網絡中。您需要爲不同的網絡分配不同的地址。 –

回答

0

我會用NodePort與固定的外部端口服務,然後使用ACL來限制訪問,我想,IE在特定子網中的節點。

舉例固定NodePort:

apiVersion: v1 
kind: Service 
metadata: 
    name: nginx 
    labels: 
    name: nginx 
spec: 
    type: NodePort 
    ports: 
    - port: 80 
     nodePort: 30080 
     name: http 
    - port: 443 
     nodePort: 30443 
     name: https 
    selector: 
    name: nginx 
+0

這將確保只有特定子網中的節點在給定的「NodePort」上偵聽?或者只是想讓ACL在任何其他子網的節點上阻止對該端口的訪問? – joshlf

+0

不,這隻會指示kubernetes使用30080和30443而不是隨機端口,因此您可以使用ACL來阻止不需要的節點。 –

相關問題