【问题标题】:Accessing Kubernetes pods/services through one IP (Preferably Master Node)通过一个 IP(最好是 Master Node)访问 Kubernetes pods/services
【发布时间】:2018-01-09 15:04:51
【问题描述】:

我有一个本地 Kubernetes 安装,带有一个主节点和两个工作节点。有没有办法通过主节点的 ip 访问将安装在 Kubernetes 上的所有服务/pod?

我的意思是说我在每个工作人员的端口 30001 上运行了一个测试服务,我想像http://master-node:30001 这样访问这个服务。感谢您的每一次帮助。

【问题讨论】:

    标签: kubernetes kubectl


    【解决方案1】:

    您可以使用“代理动词”通过 master 访问节点、pod 或服务。只能代理 HTTP 和 HTTPS。请参阅这些docs 和这些docs

    【讨论】:

    • 那些不是只用于内置服务吗?
    • 不,现在知道了。谢谢!
    【解决方案2】:

    有一些方法可以做到:

    • 定义 NodePort Kubernetes 服务
    • 使用 kubefwd 或端口转发命令
    • 使用代理命令(仅支持 HTTP & HTTPS)

    在这个答案中,我解释了如何定义 NodePort 服务。

    NodePort服务解释如下(Service - Kubernetes

    NodePort:在每个节点的 IP 上的静态端口(NodePort)上公开服务。自动创建 NodePort 服务路由到的 ClusterIP 服务。您可以通过以下请求从集群外部联系 NodePort 服务:。

    这里是 PostgreSQL 的 NodePort 服务示例:

    apiVersion: v1
    kind: Service
    metadata:
      name: postgres
      namespace: postgres
      labels:
        app: postgres
    spec:
      ports:
        - port: 5432
      type: NodePort
      selector:
        app: postgres
    

    port 字段代表服务端口和默认目标端口。还有一个nodePort字段,允许您选择从集群外部访问服务的端口(通过节点的IP和nodePort)

    要查看节点的端口(如果你没有从清单中指定),你可以运行命令:

    kubectl get services -n postgres
    

    输出应该类似于:

    NAME       TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGE    SELECTOR
    postgres   NodePort   10.96.156.75   <none>        5432:30864/TCP   6d9h   app=postgres
    

    在本例中,nodePort 为30864,这是从集群外部访问服务的端口。

    要找出节点的IP,使用的命令是:

    kubectl get nodes -o wide
    

    输出应该类似于:

    NAME                    STATUS   ROLES    AGE   VERSION   INTERNAL-IP   EXTERNAL-IP   OS-IMAGE                                     KERNEL-VERSION   CONTAINER-RUNTIME
    homedev-control-plane   Ready    master   30d   v1.19.1   172.18.0.2    <none>        Ubuntu Groovy Gorilla (development branch)   5.9.1-arch1-1    containerd://1.4.0
    

    如果您只需要 IP:

    kubectl get nodes -o wide --no-headers | awk '{print $6}'
    

    在这种情况下,节点的 IP 是172.18.0.2。因此,要从主机连接到本地 Kubernetes 集群中的 Postgres,命令如下所示:

    psql -U postgres -h 172.18.0.2 -p 30864-d postgres
    

    【讨论】:

      猜你喜欢
      • 2017-10-06
      • 1970-01-01
      • 1970-01-01
      • 2020-12-23
      • 2021-10-20
      • 2018-06-16
      • 2018-09-24
      • 1970-01-01
      • 2022-01-03
      相关资源
      最近更新 更多