我试图在 EKS 集群上应用服务externalIPs 功能。
我所做的
我创建了 EKS 集群eksctl
:
eksctl create cluster --name=test --region=eu-north-1 --nodes=1
我已经打开了所有安全组以确保我没有防火墙问题。ACL 也允许所有流量。我将公共 IP 用于唯一可用的工作节点,并尝试通过简单的服务 + 部署来使用它。这应该只有 1 个部署和 1 个副本集和 1 个 pod 和 nginx。这应该附加到每个人都可以访问的具有外部/公共 IP 的服务。
apiVersion: apps/v1
kind: Deployment
metadata:
name: app
spec:
replicas: 1
selector:
matchLabels:
app: app
template:
metadata:
labels:
app: app
spec:
containers:
- name: nginx
image: nginx
---
apiVersion: v1
kind: Service
metadata:
name: app
labels:
app: app
spec:
ports:
- port: 80
targetPort: 80
selector:
app: app
externalIPs:
- 13.51.55.82
当我应用它时,一切似乎都很好。我可以将我的app
服务端口转发到 localhost,我可以看到输出 ( kubectl port-forward svc/app 9999:80
-> curl localhost:9999
)。
但问题是我无法通过公共 IP 访问此服务。
$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
app ClusterIP 10.100.140.38 13.51.55.82 80/TCP 49m
kubernetes ClusterIP 10.100.0.1 <none> 443/TCP 62m
$ curl 13.51.55.82:80
curl: (7) Failed to connect to 13.51.55.82 port 80: Connection refused
想法
对我来说,服务似乎没有连接到节点本身。当我 ssh 到节点并在端口 80 上设置简单的 Web 服务器时,它会立即响应。
我知道我可以使用 NodePort,但就我而言,我最终希望使用固定端口 4000,而 NodePort 只允许我使用 30000-32768 范围内的端口。
问题
我希望能够在低于 30000 的某个端口上通过公共 IP 卷曲我的服务(NodePort 不适用)。如何使其与 EKS 集群上的 Kubernetes 服务外部 IP 一起使用?
编辑我:
仅供参考:我不想使用 LoadBalancer。