通过一个IP(最好是主节点)访问Kubernetes pod /服务

时间:2017-08-02 11:44:05

标签: kubernetes kubectl

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

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

有一些方法可以做到:

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

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

NodePort服务的解释如下(Service - Kubernetes

NodePort:在静态端口(NodePort)上的每个节点的IP上公开服务。将自动创建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