1

The Problem: Ingress don't show the website

I have my own cluster on Proxomox with 1 Master and 3 worker Nodes

root@sedeka78:~# kubectl get nodes
NAME       STATUS   ROLES           AGE     VERSION
sedeka78   Ready    master,worker   4d21h   v1.18.5
sedeka79   Ready    worker          4d21h   v1.18.5
sedeka80   Ready    worker          4d21h   v1.18.5
sedeka81   Ready    worker          4d21h   v1.18.5

The DNS is forwarding kube1.ktc.local and kube2.ktc.local to the IP Adress 10.10.10.78

root@sedeka78:~# ping kube1.ktc.local
PING sedeka78.ktc.local (10.10.10.78) 56(84) bytes of data.
64 bytes from sedeka78.ktc.local (10.10.10.78): icmp_seq=1 ttl=64 time=0.070 ms

and

root@sedeka78:~# ping kube2.ktc.local
PING sedeka78.ktc.local (10.10.10.78) 56(84) bytes of data.
64 bytes from sedeka78.ktc.local (10.10.10.78): icmp_seq=1 ttl=64 time=0.030 ms

I worked straight (i changed some ports) after this tutorial https://www.digitalocean.com/community/tutorials/how-to-set-up-an-nginx-ingress-on-digitalocean-kubernetes-using-helm.

The Pods

root@sedeka78:~# kubectl get pods -o wide
NAME                                      READY   STATUS    RESTARTS   AGE   IP               NODE       NOMINATED NODE   READINESS GATES
hello-kubernetes-first-5f4cb78558-q8zl5   1/1     Running   0          22h   10.244.251.6     sedeka81   <none>           <none>
hello-kubernetes-first-5f4cb78558-vwthq   1/1     Running   0          22h   10.244.101.133   sedeka79   <none>           <none>
hello-kubernetes-first-5f4cb78558-xkxh4   1/1     Running   0          22h   10.244.253.6     sedeka80   <none>           <none>
hello-kubernetes-second-756f6664b-b5rg5   1/1     Running   0          13h   10.244.253.8     sedeka80   <none>           <none>
hello-kubernetes-second-756f6664b-kpjg5   1/1     Running   0          13h   10.244.101.135   sedeka79   <none>           <none>
hello-kubernetes-second-756f6664b-tst5p   1/1     Running   0          13h   10.244.251.8     sedeka81   <none>           <none>

Deployment of POD kubernetes-first (the second is closely the same)

root@sedeka78:~# cat /srv/01-hello-kubernetes-first.yaml
apiVersion: v1
kind: Service
metadata:
  name: hello-kubernetes-first
spec:
  type: ClusterIP
  ports:
  - port: 8090 # Changed
    targetPort: 8080 # Changed
  selector:
    app: hello-kubernetes-first
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: hello-kubernetes-first
spec:
  replicas: 3
  selector:
    matchLabels:
      app: hello-kubernetes-first
  template:
    metadata:
      labels:
        app: hello-kubernetes-first
    spec:
      containers:
      - name: hello-kubernetes
        image: paulbouwer/hello-kubernetes:1.7
        ports:
        - containerPort: 8090 # Changed
        env:
        - name: MESSAGE
          value: Hello from the first deployment!
root@sedeka78:~#

The Services

root@sedeka78:~# kubectl get services
NAME                      TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
hello-kubernetes-first    ClusterIP   10.107.187.54   <none>        8090/TCP   22h
hello-kubernetes-second   ClusterIP   10.109.164.92   <none>        8090/TCP   13h
kubernetes                ClusterIP   10.96.0.1       <none>        443/TCP    4d21h

The Ingress

root@sedeka78:~# kubectl get ingress
NAME                       CLASS    HOSTS                             ADDRESS   PORTS   AGE
hello-kubernetes-ingress   <none>   kube1.ktc.local,kube2.ktc.local             80      16s

Describe Ingress

root@sedeka78:~# kubectl describe ingress
Name:             hello-kubernetes-ingress
Namespace:        default
Address:
Default backend:  default-http-backend:80 (<error: endpoints "default-http-backend" not found>)
Rules:
  Host             Path  Backends
  ----             ----  --------
  kube1.ktc.local
                      hello-kubernetes-first:8080 (10.244.101.133:8080,10.244.251.6:8080,10.244.253.6:8080)
  kube2.ktc.local
                      hello-kubernetes-second:8080 (10.244.101.135:8080,10.244.251.8:8080,10.244.253.8:8080)
Annotations:       kubernetes.io/ingress.class: nginx
Events:
  Type    Reason  Age   From                      Message
  ----    ------  ----  ----                      -------
  Normal  CREATE  76s   nginx-ingress-controller  Ingress default/hello-kubernetes-ingress

The Ingress Ressource

root@sedeka78:~# cat /srv/03-hello-kubernetes-ingress-ressouce.yaml
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: hello-kubernetes-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
spec:
  rules:
  - host: kube1.ktc.local
    http:
      paths:
      - backend:
          serviceName: hello-kubernetes-first
          servicePort: 8080
  - host: kube2.ktc.local
    http:
      paths:
      - backend:
          serviceName: hello-kubernetes-second
          servicePort: 8080
root@sedeka78:~#

after installing ingress with

helm install nginx-ingress stable/nginx-ingress --set controller.publishService.enabled=true -n nginx-ingress

the Ingress didn't get an external IP the status was

root@sedeka78:~# kubectl get svc  --all-namespaces
NAMESPACE              NAME                            TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
default                hello-kubernetes-first          ClusterIP      10.107.187.54    <none>        8090/TCP                     23h
default                hello-kubernetes-second         ClusterIP      10.109.164.92    <none>        8090/TCP                     14h
default                kubernetes                      ClusterIP      10.96.0.1        <none>        443/TCP                      4d22h
kube-system            kube-dns                        ClusterIP      10.96.0.10       <none>        53/UDP,53/TCP,9153/TCP       4d22h
kubernetes-dashboard   dashboard-metrics-scraper       ClusterIP      10.98.225.46     <none>        8000/TCP                     4d22h
kubernetes-dashboard   kubernetes-dashboard            ClusterIP      10.101.166.61    <none>        443/TCP                      4d22h
nginx-ingress          nginx-ingress-controller        LoadBalancer   10.96.53.198     <pending>     80:30979/TCP,443:32433/TCP   14m
nginx-ingress          nginx-ingress-default-backend   ClusterIP      10.107.251.104   <none>        80/TCP                       14m

describe service

root@sedeka78:~# kubectl describe service -n nginx-ingress nginx-ingress
Name:                     nginx-ingress-controller
Namespace:                nginx-ingress
Labels:                   app=nginx-ingress
                          app.kubernetes.io/managed-by=Helm
                          chart=nginx-ingress-1.40.3
                          component=controller
                          heritage=Helm
                          release=nginx-ingress
Annotations:              meta.helm.sh/release-name: nginx-ingress
                          meta.helm.sh/release-namespace: nginx-ingress
Selector:                 app.kubernetes.io/component=controller,app=nginx-ingress,release=nginx-ingress
Type:                     LoadBalancer
IP:                       10.103.119.0
Port:                     http  80/TCP
TargetPort:               http/TCP
NodePort:                 http  30388/TCP
Endpoints:                10.244.101.138:80
Port:                     https  443/TCP
TargetPort:               https/TCP
NodePort:                 https  30236/TCP
Endpoints:                10.244.101.138:443
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>

Name:              nginx-ingress-default-backend
Namespace:         nginx-ingress
Labels:            app=nginx-ingress
                   app.kubernetes.io/managed-by=Helm
                   chart=nginx-ingress-1.40.3
                   component=default-backend
                   heritage=Helm
                   release=nginx-ingress
Annotations:       meta.helm.sh/release-name: nginx-ingress
                   meta.helm.sh/release-namespace: nginx-ingress
Selector:          app.kubernetes.io/component=default-backend,app=nginx-ingress,release=nginx-ingress
Type:              ClusterIP
IP:                10.106.6.221
Port:              http  80/TCP
TargetPort:        http/TCP
Endpoints:         10.244.253.9:8080
Session Affinity:  None
Events:            <none>

Why I dont get a external IP ?

All Nodes are VM on proxmox runing debian buster

Thank you Peter

P3t3r
  • 41
  • 1
  • 5
  • What is your cloud provider? To get a external ip you need to use some cloud provider or [metallb](https://metallb.universe.tf/) – Mr.KoopaKiller Jul 20 '20 at 13:53
  • I don't have a clud provider. I have 4VM (1xMaster&Worker Nadoe and 3 Worker Nodes) see at the beginning of the Post sedeka78 Ready master,worker 4d21h v1.18.5 sedeka79 Ready worker 4d21h v1.18.5 sedeka80 Ready worker 4d21h v1.18.5 sedeka81 Ready worker 4d21h v1.18.5 the Pods (webseite hello world1) are running, ingress shoud serve via reverse proxy the webseite hello world 1. I Don't have a IP Adresspool for the websites like metalb, and i don't know why i need this. – P3t3r Jul 20 '20 at 15:36

1 Answers1

0

Service type LoadBalancer and Ingresses only can be used in a cloud provider.

LoadBalancer: Exposes the Service externally using a cloud provider's load balancer. NodePort and ClusterIP Services, to which the external load balancer routes, are automatically created.

The same is applied to Ingress. So you will only get an External IP (public IP) if you use service type LoadBalancer or Ingress in a cloud provider.

Alternatively, if you are using a bare-metal cluster you can try MetalLB, configure a ip range from your network and metallb will provide an External IP from this range.

Mr.KoopaKiller
  • 3,665
  • 10
  • 21