gaut
gaut

Reputation: 5958

Kubernetes redirect front-end to back-end

In Kubernetes I have a load balancer and 2 web apps (with names UI and Kuard) that are both publicly available through services and ingress rules similar to:

Kuard Service:

apiVersion: v1
kind: Service
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |xxx
  creationTimestamp: "2022-01-17T15:44:30Z"
  labels:
    app: kuard
    app.kubernetes.io/managed-by: pulumi
  name: mykuard
  namespace: nginx-test-frwjnfp0
  resourceVersion: "975"
  uid: 819d94ca-b63d-44d5-9af9-a83da3f4bbd8
spec:
  clusterIP: 10.3.250.8
  clusterIPs:
  - 10.3.250.8
  ipFamilies:
  - IPv4
  ipFamilyPolicy: SingleStack
  ports:
  - port: 8080
    protocol: TCP
    targetPort: http
  selector:
    app: kuard
  sessionAffinity: None
  type: ClusterIP
status:
  loadBalancer: {}

Kuard Ingress

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: | xxx
    kubernetes.io/ingress.class: nginx
    pulumi.com/autonamed: "true"
  creationTimestamp: "2022-01-17T15:44:42Z"
  generation: 2
  labels:
    app: kuard
    app.kubernetes.io/managed-by: pulumi
  name: kuard-tuy3sb0v
  namespace: nginx-test-frwjnfp0
  resourceVersion: "13091"
  uid: 4d14f3fc-d116-4233-a717-c38d92741139
spec:
  rules:
  - host: kuard.xxx.com
    http:
      paths:
      - backend:
          service:
            name: mykuard
            port:
              name: http
        path: /
        pathType: ImplementationSpecific
status:
  loadBalancer:
    ingress:
    - ip: xxx

As you can see for now I can access the Kuard app by going to kuard.xxx.com where xxx is the public LB IP.

Currently I am able to navigate to the Kuard app from the UI app by hardcoding kuard.xxx.com in my UI app. This is stupid because I'm using the WWW address rather than using the internal cluster address.

Which URL (and ingress?) can I use in order to open the Kuard app in the browser from the UI app based on its internal cluster address, rather than the WWW URL?

I tried hardcoding http://mykuard:80 in the "UI" web app because the service name for the Kuard app is mykuard, but I'm definitely missing something.

Upvotes: 1

Views: 271

Answers (1)

user15659347
user15659347

Reputation:

What you want is not possible.

When accessing a service from a browser, you are making request from outside your cluster. For this you need external IP.

The internal cluster address (<service-name>:<port>) is for internal communication only (e.g. pod to pod) , and is resolved by your internal DNS, to which your browser does not have access.

Upvotes: 1

Related Questions