2

Google Cloud で次の環境をセットアップしようとしていますが、3 つの大きな問題があります。

データベース クラスタ

  • 3 ノード
  • 世界に開かれた 1 つのポート、コンピューティング クラスターに開かれたいくつかのポート

コンピューティング クラスター - 5 つのノード - データベース クラスターと通信 - 世界に開かれた 2 つのポート - Docker コンテナーを実行

a)データベース クラスタは正常に動作します。構成ポートは全世界に開いて​​いますが、他のポートをコンピューティング クラスタのみに制限する方法がわかりません。

最初の Pod と Replication-Controller をコンピューティング クラスターで実行することに成功し、コンテナーを世界中に公開するサービスを作成しました。

コントローラ:

{
  "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 を公開します。この 2 つの接続はどこにありますか?

ファイアウォールはラベルで動作します。コンピューティング クラスターで 4 ~ 5 個の異なるポッドを実行し、そのうちの 2 個は世界へのポートを開いています。同じインスタンスで 2 つ以上のコンテナーを実行できます。ただし、ラベルはコンテナではなくノードに固有です。

c)すべてのノードを同じファイアウォール構成で公開しますか? コンテナーにラベルを割り当てることができないため、たとえば API サービスを公開する方法がわかりませんか?

4

1 に答える 1

2

できる限りすべての質問にお答えできるよう最善を尽くします。

まず、v1beta1 と v1beta3 は 8 月 5 日以降は利用できなくなるため、Kubernetes API の v1 を使用してアップグレードする必要があります: https://cloud.google.com/container-engine/docs/v1-upgrade

また、YAML を使用します。それほど冗長ではありません;)

--

次に、あなたが尋ねた質問に進みます。

a) あなたがここで質問していることを完全に理解しているかどうかはわかりませんが、同じクラスター内でサービスを実行する (リソース制限付き) 方が、クロスクラスター ネットワーキングに対処するよりもはるかに簡単であるように思えます。

targetPortb)サービスがコンテナーで使用するポートを認識できるように、a を指定する必要があります。これは、リソース コントローラーにあるポート 3000 と一致する必要があります。詳細については、ドキュメントを参照してください。

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

c) はい。Kubernetes では、kube-proxy は任意のノードでトラフィックを受け入れ、適切なノードまたはローカル ポッドにルーティングします。ロード バランサーのマッピングや、ポッドを実行している特定のノードのファイアウォール ルールの作成について心配する必要はありません (ローリング アップデートを行うと、実際には変更される可能性があります!)。kube-proxy は、サービスがそのノードで実行されていない場合でも、トラフィックを適切な場所にルーティングします。

于 2015-08-03T06:34:29.023 に答える