如何通过单个IP访问Kubernetes pod



我有一组基于以下机队运行的吊舱:

apiVersion: "agones.dev/v1"
kind: Fleet
metadata:
name: bungee
spec:
replicas: 2
template:
metadata:
labels:
run: bungee
spec:
ports:
- name: default
containerPort: 25565
protocol: TCP
template:
spec:
containers:
- name: bungee
image: a/b:test

我可以使用<node-IP>:<port>访问集群外的这些pod,其中端口是Agones给定的每个pod的随机端口。

我的目标是能够通过单个IP连接到这些pod,这意味着我必须添加某种负载均衡器。我试着使用LoadBalancer类型的服务,但我无法连接到任何带有它的pod。

apiVersion: v1
kind: Service
metadata:
name: bungee-svc
spec:
type: LoadBalancer
loadBalancerIP: XXX.XX.XX.XXX
ports:
- port: 25565
protocol: TCP
selector:
run: bungee
externalTrafficPolicy: Local

这样的服务在这里是错误的方法吗?如果是,我应该使用什么?如果它是正确的,为什么它不起作用?

编辑:检查服务状态时,外部IP字段显示挂起。我在裸机上运行Kubernetes。

编辑2:试图按照建议使用NodePort,我发现该服务没有得到外部IP地址。尝试连接到<node-IP>:<nodePort>不起作用。这可能是与选择器有关的问题吗?

LoadBalancer服务本可以在与托管Kubernetes节点的云提供商(cloud-controller-manager组件(的API集成的集群中工作。由于您的情况并非如此,因此您正在寻找NodePort服务。

类似于:

apiVersion: v1
kind: Service
metadata:
name: bungee-svc
spec:
type: NodePort
ports:
- port: 25565
protocol: TCP
selector:
run: bungee

创建该服务后,您可以检查其描述或yaml/json表示:

# kubectl describe svc xxx
Type:                     NodePort
IP:                       10.233.24.89 <- ip within SDN
Port:                     tcp-8080  8080/TCP <- ports within SDN
TargetPort:               8080/TCP <- port on your container
NodePort:                 tcp-8080  31655/TCP <- port exposed on your nodes
Endpoints:                10.233.108.232:8080 <- pod:port ...
Session Affinity:         None

现在,我知道端口31655被分配给了我的NodePort服务——端口在您的集群中是唯一的,它们是在一个范围内选择的,这取决于您的集群配置。

我可以在分配给我的NodePort服务的端口上连接到我的服务,访问任何Kubernetes节点IP。

curl http://k8s-worker1.example.com:31655/

附带说明:LoadBalancer服务扩展了NodePort服务。虽然externalIP永远不会出现,但请注意,您的服务已经分配了自己的端口,就像任何NodePort服务一样,它旨在从代表您的集群配置的LoadBalancer接收流量,并将其集成到云基础设施上。

而且。。。我不得不说,我对阿戈内斯并不熟悉。当你说";我可以用<node-IP>:<port>访问集群外的这些吊舱,其中端口是由Agones给出的每个吊舱随机的";。你确定端口是在每个pod的基础上分配的,并绑定到给定的节点吗?或者可能是他们已经在使用NodePort服务。再看一眼:您是否尝试过在集群的其他节点上连接该端口?

最新更新