I am trying to implement ClusterIP-Service on each of my Deployment. FYI, I am setting up kubernetes on my own server at the office (not using cloud for some reason). Previously here are the network/infrastructure that I could think of :
Ingress -> Service -> DeploymentI am not sure why my Ingress does not work as intended. I am using https://github.com/kubernetes/ingress-nginx as my Ingress Controller. I also applied Bare-metal Service config from https://kubernetes.github.io/ingress-nginx/deploy/
And below is my simple Ingress and ClusterIP like:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-service
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
    - http:
        paths:
          - path: /
            backend:
              serviceName: simpleweb-service
              servicePort: 80
---
apiVersion : v1
kind : Service
metadata:
  name: simpleweb-service
spec:
  type: ClusterIP
  ports:
  - port: 80
    targetPort: 80
  selector:
    component: webI tried accessing http://<server-internal-ip>:80 but I got connection refused instead of getting routed to my apps inside the particular service. Is anything I did above could possibly gone wrong ?
Do I need to have LoadBalancer before Ingress like below ? (which one is ideal)
LoadBalancer -> Ingress -> Service -> Deploymentor maybe
LoadBalancer -> Service -> DeploymentThanks in advance.
Access Options:
External load balanacer (optional) ->Service of type nodeport -> Deploymenet
External load balanacer (optional) -> Ingress -> Service ( clusterIP)-> Deploymenet
In you case , you can test it by first using the nodeport and access it directly , then if works , then use the clusterIp , and curl it inside the cluster to make sure it is running on port 80 , then expose it on ingress if you want to use ingress. Also debug and descirbe the ingress service.
If you are getting connection refused , there can be a problem with port.
Also make sure you are using the correct labels for selector.
docs: https://console.bluemix.net/docs/containers/cs_ingress.html#ingress
You have a number of options to expose your service. I suggest metallb, it allows you to expose services with LoadBalancer. With ClusterIP, the service is not exposed to the outside world, see Publishing services - service types for details. Ingress is not mandatory, but without it, you can only have one service+port / IP address, while ingress allows you to have name or / and path based routing.