【问题标题】:How do I expose Docker a Docker port via Kubernetes in Google Cloud?如何通过 Google Cloud 中的 Kubernetes 公开 Docker 一个 Docker 端口?
【发布时间】:2015-10-07 06:02:30
【问题描述】:

我正在尝试在 Google Cloud 上的 Kubernetes 中配置 Docker 实例。我已经构建了一个副本控制器,它指定了一个 pod 并定义了一个要公开的端口,但它没有被公开。

这是我的containers.yaml

apiVersion: v1
kind: ReplicationController
metadata:
  name: postgres
spec:
  replicas: 1
  selector:
    app: postgres
  template:
    metadata:
      name: postgres
      labels:
        app: postgres
    spec:
      containers:
      - name: postgres
        image: us.gcr.io/bobsapp-1008/postgres:9.4
        ports:
          -
            containerPort: 5432
            name: postgres
            protocol: TCP

这是docker ps 在运行此 pod 的计算引擎实例中以 root 身份运行时的结果:

root@gke-legal-data-6fddb637-node-49l5:/home/eric# docker ps
CONTAINER ID        IMAGE                                       COMMAND                CREATED              STATUS              PORTS               NAMES
c16b7e0071f4        us.gcr.io/bobsapp-1008/postgres:9.4          "/docker-entrypoint.   About a minute ago   Up About a minute                       k8s_postgres.82df2fa1_postgres-7wd6n_default_4e36d84b-2c1f-11e5-8f6f-42010af0664d_2a996ec3
036f8d6375bc        gcr.io/google_containers/pause:0.8.0        "/pause"               About a minute ago   Up About a minute                       k8s_POD.e4cc795_postgres-7wd6n_default_4e36d84b-2c1f-11e5-8f6f-42010af0664d_8b058463
14c6331ce91f        gcr.io/google_containers/heapster:v0.15.0   "/heapster --source=   3 minutes ago        Up 3 minutes                            k8s_heapster.bb306f05_monitoring-heapster-v5-p0orx_kube-system_983e585e-2bd7-11e5-8f6f-42010af0664d_b8b0aff1
8ab049b45e57        gcr.io/google_containers/pause:0.8.0        "/pause"               6 hours ago          Up 6 hours                              tender_rosalind
03c9810efd2d        gcr.io/google_containers/fluentd-gcp:1.8    "\"/bin/sh -c '/usr/   8 hours ago          Up 8 hours                              k8s_fluentd-cloud-logging.7721935b_fluentd-cloud-logging-gke-legal-data-6fddb637-node-49l5_kube-system_d0feac1ad02da9e97c4bf67970ece7a1_520ad44a
8ad81f1eb559        gcr.io/google_containers/pause:0.8.0        "/pause"               8 hours ago          Up 8 hours                              k8s_POD.e4cc795_monitoring-heapster-v5-p0orx_kube-system_983e585e-2bd7-11e5-8f6f-42010af0664d_d321075c
931e38c13e91        gcr.io/google_containers/pause:0.8.0        "/pause"               8 hours ago          Up 8 hours                              k8s_POD.e4cc795_fluentd-cloud-logging-gke-legal-data-6fddb637-node-49l5_kube-system_d0feac1ad02da9e97c4bf67970ece7a1_69d90d4f

您可以看到没有暴露的端口。为什么我的 postgres(端口 5432)没有暴露?

【问题讨论】:

    标签: postgresql google-app-engine docker google-cloud-platform kubernetes


    【解决方案1】:

    kubernetes 中的每个 pod 在集群的私有网络上都有自己的 IP 地址。您的 postgres 容器打开的端口位于该 IP 地址上,而不是直接位于主机 VM 的 IP 上。

    如果您运行 kubectl get pod postgres,它应该返回 pod 的 IP 地址,然后您应该能够使用该地址从集群内访问 postgres。

    请注意,使用服务是为 pod 提供 DNS 名称或使一组复制的 pod 都可在同一地址访问的常用方法。

    【讨论】:

      【解决方案2】:

      如果您没有使用 service.yml 向外部公开端口,那么您可以使用此方法将端口转发给自己。

      打开 Kubernetes,点击 Pods,如果看不到 pod 名称,请折叠菜单,然后点击要转发的 pod。复制 pod 的名称并将其插入到此命令中。

      kubectl port-forward <your pod name> <port number>
      

      示例:

      kubectl port-forward potato-dks2ko3 8080
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-02-12
        • 1970-01-01
        • 2022-01-13
        • 1970-01-01
        • 2015-03-17
        • 2020-11-15
        • 1970-01-01
        相关资源
        最近更新 更多