我有一个带有主节点和两个工作节点的本地Kubernetes安装。有没有办法通过主节点的IP访问将安装在Kubernetes上的所有服务/ pod?
我的意思是说我在每个工作人员的端口30001上运行测试服务,我希望像http://master-node:30001那样访问此服务。感谢每一位帮助。
答案 0 :(得分:2)
答案 1 :(得分:1)
有一些方法可以做到:
在此答案中,我解释了如何定义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