2015-06-11 86 views
2

我試圖設置以下環境中的谷歌雲和有3個主要問題是:集羣通信和谷歌集裝箱防火牆引擎

數據庫集羣

  • 3個節點
  • 一個口通向世界,通向計算集羣的幾個港口

計算羣集 - 5節點 - COMMUNIC ated與數據庫集羣 - 兩個端口向世界開放 - 運行Docker容器

一)數據庫集羣運行正常,我也開到世界上配置端口,但我不知道如何限制其他端口僅限於計算集羣?

我設法拿到了第一莢和複製 - 控制器的計算集羣上運行,並且創建了一個服務,打開容器,以世界:

控制器:

{ 
    "id": "api-controller", 
    "kind": "ReplicationController", 
    "apiVersion": "v1beta1", 
    "desiredState": { 
    "replicas": 2, 
    "replicaSelector": { 
     "name": "api" 
    }, 
    "podTemplate": { 
     "desiredState": { 
     "manifest": { 
      "version": "v1beta1", 
      "id": "apiController", 
      "containers": [{ 
      "name": "api", 
      "image": "gcr.io/my/api", 
      "ports": [{ 
       "name": "api", 
       "containerPort": 3000 
      }] 
      }] 
     } 
     }, 
     "labels": { 
     "name": "api" 
     } 
    } 
    } 
} 

服務:

{ 
    "id": "api-service", 
    "kind": "Service", 
    "apiVersion": "v1beta1", 
    "selector": { 
    "name": "api" 
    }, 
    "containerPort": "api", 
    "protocol": "TCP", 
    "port": 80, 
    "selector": { "name": "api" }, 
    "createExternalLoadBalancer": true 
} 

b)該容器暴露端口3000,服務端口80.兩者之間的連接在哪裏?

防火牆使用標籤。我希望4-5個不同的豆莢在我的計算集羣中運行,其中2個豆莢向世界開放端口。可以有兩個或更多的容器在同一個實例上運行。然而,標籤是特定於節點的,而不是容器。

c)我是否使用相同的防火牆配置公開所有節點?我不能將標籤分配給容器,因此不知道如何公開api服務,例如?

+0

您是否有理由運行兩個集羣?在資源限制的同一羣集中運行它們似乎更容易,而且不必過多擔心網絡。 –

+0

我需要不同的機器時間(數據庫大,服務中/小),Container Engine沒有這個功能。 – Patrick

+0

我只是使用大尺寸的集羣並運行該集羣中的所有內容(根據我的回答),因爲這是最簡單的方法。 –

回答

2

我會盡我所能來回答你所有的問題。

首先,你會想升級到使用Kubernetes API的第一版,因爲v1beta1和v1beta3會8月5日之後不再可用: https://cloud.google.com/container-engine/docs/v1-upgrade

此外,使用YAML。它是如此冗長少得多)

-

現在到你提出的問題:

一)我不知道我完全明白你問什麼在這裏,但它聽起來像運行同一集羣中的服務(與resource limits)將比處理跨集羣網絡容易得多。

b)您需要指定一個targetPort,以便服務知道在容器上使用哪個端口。這應該與您的資源控制器中的端口3000匹配。有關更多信息,請參閱docs

{ 
    "kind": "Service", 
    "apiVersion": "v1", 
    "metadata: { 
    "labels": [{ 
     "name": "api-service" 
    }], 
    }, 
    "spec": { 
    "selector": { 
     "name": "api" 
    }, 
    "ports": [{ 
     "port": 80, 
     "targetPort": 3000 
    }] 
    "type": "LoadBalancer" 
    } 
} 

c)是的。在Kubernetes中,kube-proxy接受任何節點上的流量並將其路由到適當的節點或本地pod。您不必擔心映射負載平衡器,或爲正在運行您的容器的那些特定節點編寫防火牆規則(如果您執行滾動更新,它實際上可能會更改!)。即使您的服務未在該節點上運行,kube-proxy也會將流量路由到正確的位置。

+1

謝謝,幫助;除了YAML評論之外 - 一種依賴2個語義空間的格式簡直就是廢話。我寧願寫{}的。 – Patrick

+0

哦,來吧。無論如何,如果你手工編寫它,你應該格式化它。我猜你也不是Python的粉絲;) –