google-compute-engine - Google Container Engine 中的集群通信和防火墙

标签 google-compute-engine google-kubernetes-engine

我尝试在 Google Cloud 上设置以下环境,但遇到 3 个主要问题:

数据库集群

  • 3 个节点
  • 一个端口向世界开放,几个端口向计算集群开放

计算集群 - 5个节点 - 与数据库集群通信 - 两个向世界开放的港口 - 运行 Docker 容器

a) 数据库集群运行正常,我有向世界开放的配置端口,但我不知道如何将其他端口限制为仅计算集群?

我设法让第一个 Pod 和 Replication-Controller 在计算集群上运行,并创建了一个服务来向世界开放容器:

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,两者之间的联系在哪里?

防火墙使用标签。我希望在我的计算集群中运行 4-5 个不同的 Pod,其中 2 个具有通向世界的开放端口。同一实例上可以运行 2 个或更多容器。然而,标签特定于节点,而不是容器。

c) 我是否公开具有相同防火墙配置的所有节点?我无法为容器分配标签,因此不确定如何公开 api 服务?

最佳答案

我会尽力回答您的所有问题。

首先,您需要升级到使用 Kubernetes API v1,因为 v1beta1 和 v1beta3 在 8 月 5 日之后将不再可用: https://cloud.google.com/container-engine/docs/v1-upgrade

另外,使用 YAML。它非常简洁;)

--

现在回答您提出的问题:

a)我不确定我完全理解您在这里问的问题,但听起来在同一个集群中运行服务(使用 resource limits )比尝试处理跨集群网络要容易得多。

b) 您需要指定 targetPort 以便服务知道在容器上使用哪个端口。这应该与您的资源 Controller 中的端口 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。您无需担心将负载均衡器映射到运行 Pod 的特定节点,或为这些特定节点编写防火墙规则(如果您进行滚动更新,它实际上可能会发生变化!)。即使您的服务没有在该节点上运行,kube-proxy 也会将流量路由到正确的位置。

关于google-compute-engine - Google Container Engine 中的集群通信和防火墙,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30775379/

相关文章:

ssh - 如何在 2 个 Google Cloud Debian 实例之间进行 SSH

docker - 如何在GCP中的容器OS镜像的启动脚本中使用gsutil?

docker - 谷歌 Kubernetes 引擎 : ErrImagePull: Too Many Links

prometheus - 当值不存在时,默认求和运算符为 0

kubernetes - 如何在GKE上使用入口映射不匹配的路由

google-compute-engine - GCE负载均衡器运行状况检查与实例组运行状况检查

谷歌计算引擎上的 Hadoop

ssh - gcloud将ssh从一个VM迁移到Google Cloud上的另一个VM

kubernetes - 使用 Google IAM 进行 GKE 服务 Web 访问

kubernetes - 在 Google Container Engine 上访问 SkyDNS etcd API 以添加自定义记录