Search code examples
amazon-eks

AWS-EKS deployed pod is exposed with type service Node Port is not accessible over nodePort IP and exposed port


I've created k8s cluster on AWS using EKS with Terraform followed this documentation https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html .

I have one worker node.Note: Everything is in Private Subnets

Just running node.js hello-world container

Code for pod definition

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

Code for service definition

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 shows that my pod is up and running

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

kubectl get svc shows that my service is also created

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

kubectl describe svc helloworld-service it has correct end-point and correct selector

So here is the problem

When I hit NodeIP:exposed port(which is 31001) I'm getting This site can’t be reached

then I used kubeclt port-forward podname 3000:3000

I can hit with curl -v localhost:3000 is reachable

I checked my security group inbound rule is 0-65535 from my CIDR block.

Is there anything else I'm missing?


Solution

  • Fixed.. On AWS EKS nodeports are not working as on Pure Kubernetes. when you exposing

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

    31001 that's the clusterIP port will get exposed.

    in order to get nodePort you must describe your service and look for NodePort is description that was exposed