【发布时间】:2018-01-09 15:04:51
【问题描述】:
我有一个本地 Kubernetes 安装,带有一个主节点和两个工作节点。有没有办法通过主节点的 ip 访问将安装在 Kubernetes 上的所有服务/pod?
我的意思是说我在每个工作人员的端口 30001 上运行了一个测试服务,我想像http://master-node:30001 这样访问这个服务。感谢您的每一次帮助。
【问题讨论】:
标签: kubernetes kubectl
我有一个本地 Kubernetes 安装,带有一个主节点和两个工作节点。有没有办法通过主节点的 ip 访问将安装在 Kubernetes 上的所有服务/pod?
我的意思是说我在每个工作人员的端口 30001 上运行了一个测试服务,我想像http://master-node:30001 这样访问这个服务。感谢您的每一次帮助。
【问题讨论】:
标签: kubernetes kubectl
有一些方法可以做到:
在这个答案中,我解释了如何定义 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
【讨论】: