我有一组基于以下机队运行的吊舱:
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服务。再看一眼:您是否尝试过在集群的其他节点上连接该端口?