Can I get response of curl through POD IP address (instead of host address) while using nginx ingress

12/31/2021

I am using nginx ingress controller below is the ingress rule file for 2 services:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress
  namespace: kube-system
  annotations:
    kubernetes.io/ingress.class: nginx
    kubernetes.io/ingress.allow-http: "false"
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
    nginx.ingress.kubernetes.io/use-regex: "true"
    nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
  tls:
  - hosts:
    - rewrite.bar.com.com
    secretName: ingress-tls
  rules:
  - host: rewrite.bar.com.com
  - http:
      paths:
      - path: /my-service-1/(.*)
        pathType: Prefix
        backend:
          service:
            name: my-service-1
            port:
              number: 36995
      - path: /my-service-2/(.*)
        pathType: Prefix
        backend:
          service:
            name: my-service-2
            port:
              number: 32243

Now using below command through shell of service-2 I can curl to the service-1 api endpoint, here I need to pass host ('wire.com') which is TLS enabled as well,

curl --resolve wire.com:443:10.22.148.179 https://wire.com:32243/GetData

Above curl using host address give me response successfully, no issue here!

Now I am using IP address of the POD instead of host address, but this won't give me response, it's always give error like curl: (52) Empty reply from server. Here 10.22.148.179 is my ingress public IP address and 10.2.0.58 is my POD IP address.

curl --resolve enabledservices-dev-aks.honeywell.com:443:10.22.148.179 http//10.2.0.58:32243/GetData

My goal to hit the POD/service api end point through IP address, is this possible with context of Ingress integrated?

-- user584018
kubernetes
nginx-ingress

1 Answer

12/31/2021

Moving this from comments to answer.


The issue was curl request and HTTP protocol used while the server is serving by HTTPS. This is the reason of (52) Empty reply from server error.

Request by curl should be done by specifying the protocol like:

curl https://test.example.com:8888

Ingress is used as a single entry point to the cluster so all inside services can be exposed internally in the cluster using cluster-ip service type - see kubernetes service types.

If any inside service/pod is required to be tested from inside the cluster, request should be executed from the cluster to be able to hit a cluster-ip since cluster-ip is only accessible within the cluster.

-- moonkotte
Source: StackOverflow