Configure Ingress Kubernetes - accessible only on single node

6/27/2017

I had setup ingress on my Kubernetes Cluster running on VMWAre virtual machines by following everything similar to the specifications here. All the ports are open and accessible.

https://github.com/nginxinc/kubernetes-ingress/tree/master/examples/complete-example

My master is x.x.x.10 and nodes are x.x.x.12 and x.x.x.13.

After the creation of ingress/controllers, I need to get the IP where the nginx-controller runs

nginx-ingress-rc-kgfmd          1/1       Running   0          21h       172.16.5.5   x.x.x.12

so, it usually runs either on x.x.x.12 or x.x.x.13, and then when I do this it hits my web service

curl --resolve master.federated.fds:80:x.x.x.12 https://master.federated.fds/coffee

where master.federated.fds is the DNS resolvable name of Master.

I need to make it work without the help of IP address and only with the DNS resolvable name or else atleast with any of the node ip's

Eg: http://node2.federated.fds/coffee, when I curl this I get Connection refused error

Updating with specifications

apiVersion: v1
kind: Service
metadata:
  name: coffee-svc
  labels:
    app: coffee
spec:
  ports:
  - port: 80
    targetPort: 80
    protocol: TCP
    name: http
#    nodePort: 30080
  type: NodePort
  selector:
    app: coffee

ingress

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: cafe-ingress
spec:
  rules:
  - host: jciamaster.federated.fds
    http:
      paths:
      - path: /tea
        backend:
          serviceName: tea-svc
          servicePort: 80
      - path: /coffee
        backend:
          serviceName: coffee-svc
          servicePort: 80

nginx ing controller

    apiVersion: v1
kind: ReplicationController
metadata:
  name: nginx-ingress-rc
  labels:
    app: nginx-ingress
spec:
  replicas: 1
  selector:
    app: nginx-ingress
  template:
    metadata:
      labels:
        app: nginx-ingress
    spec:
      containers:
      - image: nginxdemos/nginx-ingress:0.8.1
        imagePullPolicy: Always
        name: nginx-ingress
        ports:
        - containerPort: 80
          hostPort: 80

I see that the port 80 is listening only on the node where nginx pod runs and not on any other node. Could someone pls let me know how to access the application through all node ip's or thro a url like jciamaster.federated.fds?

Thanks,

Update:

Tried to run with nginx controller as svc as suggested by Marc

apiVersion: v1
kind: ReplicationController
metadata:
  name: nginx-ingress-rc
  labels:
    app: nginx-ingress
spec:
  replicas: 1
  selector:
    app: nginx-ingress
  template:
    metadata:
      labels:
        app: nginx-ingress
    spec:
      containers:
      - image: nginxdemos/nginx-ingress:0.8.1
        imagePullPolicy: Always
        name: nginx-ingress
        ports:
        - containerPort: 80

        # Uncomment the lines below to enable extensive logging and/or customization of
        # NGINX configuration with configmaps
        #args:
         #- -v=3
         #- -nginx-configmaps=default/nginx-config
---
apiVersion: v1
kind: Service
metadata:
  labels:
    name: nginx-ingress-label
  name: nginx-ing-svc
spec:
  ports:
   - port: 80
     targetPort: 80
     protocol: TCP
     name: http
     nodePort: 30000
  type: NodePort
  selector:
    name: nginx-ingress

When I hit http://x.x.x.:30000/coffee it just hangs and does nothing.Anything I am doing wrong?

-- Vikram
kubernetes

1 Answer

7/4/2017

You can expose the nginx controller Pod with a NodePort Service, then you can access it on all nodes.

-- slintes
Source: StackOverflow