部署了AWS-EKS部署的pod的服务类型为Node Node IP无法通过nodePort IP和暴露的端口访问

时间:2019-02-14 20:23:35

标签: aws-eks

我已按照本文档https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html使用带有Terraform的EKS在AWS上创建了k8s集群。

我有一个工作节点Note: Everything is in Private Subnets

只需运行node.js hello-world容器

吊舱定义代码

kind: Pod
metadata:
  name: nodehelloworld.example.com
  labels:
    app: helloworld
spec:
  containers:
  - name: k8s-demo
    image: wardviaene/k8s-demo
    ports:
    - name: nodejs-port
      containerPort: 3000

服务定义代码

apiVersion: v1
kind: Service
metadata:
  name: helloworld-service
spec:
  ports:
  - port: 31001
    nodePort: 31001
    targetPort: nodejs-port
    protocol: TCP
  selector:
    app: helloworld
  type: NodePort

kubectl get pods显示我的pod已启动并正在运行

nodehelloworld.example.com   1/1       Running   0          17h

kubectl get svc显示我的服务也已创建

helloworld-service   NodePort    172.20.146.235   <none>        31001:31001/TCP   16h

kubectl describe svc helloworld-service具有正确的端点和正确的选择器

这就是问题所在

当我点击NodeIP:暴露的端口(31001)时,我得到This site can’t be reached

然后我使用了kubeclt port-forward podname 3000:3000

我可以打curl -v localhost:3000达到

我从我的CIDR块中检查了安全组入站规则是0-65535。

还有什么我想念的吗?

2 个答案:

答案 0 :(得分:1)

已修复.. 在AWS EKS上,节点端口无法像在Pure Kubernetes上那样工作。 暴露

  - port: 31001
    targetPort: nodejs-port
    protocol: TCP

31001(即clusterIP端口)将被公开。

为了获取nodePort,您必须描述您的服务,并查找NodePort是公开的描述

答案 1 :(得分:0)

如果尝试从群集外部进行连接,则必须在工作节点的安全组中添加一个自定义TCP条目,以启用端口31001上的入站流量。 Add an entry to Inbound rules in your worker node security group

如果这不起作用,请确保您能够通过该IP连接到节点。我通常使用VPN客户端进行连接。