Jenkins installed via helm not exposed when using static IP for the nginx ingress on GKE

2/12/2020

I am setting jenkins on GKE using the official helm chart.

I am also installing the nginx ingress also via its stable helm chart and after creating a static IP on GCE as follows:

gcloud compute addresses create jenkins-static-ip --global --ip-version IPV4

I am passing the above IP to the nginx-ingress helm values:

helm upgrade --force --tls --install nginx-ingress stable/nginx-ingress --set rbac.create=true --set controller.service.loadBalancerIP=<jenkins-static-ip>

I am also using the prefix /jenkins for accessing the jenkins service.

Both the ingress controller and the ingress resource are created as below:

kubectl get svc nginx-ingress-controller -n default -o json
{
    "apiVersion": "v1",
    "kind": "Service",
    "metadata": {
        "creationTimestamp": "2020-02-12T09:54:50Z",
        "labels": {
            "app": "nginx-ingress",
            "chart": "nginx-ingress-1.29.6",
            "component": "controller",
            "heritage": "Tiller",
            "release": "nginx-ingress"
        },
        "name": "nginx-ingress-controller",
        "namespace": "default",
        "resourceVersion": "35664441",
        "selfLink": "/api/v1/namespaces/default/services/nginx-ingress-controller",
        "uid": "b6029772-4d7d-11ea-aa7f-42010a79fa0b"
    },
    "spec": {
        "clusterIP": "10.19.150.227",
        "externalTrafficPolicy": "Cluster",
        "loadBalancerIP": "13.579.24.68",
        "ports": [
            {
                "name": "http",
                "nodePort": 30508,
                "port": 80,
                "protocol": "TCP",
                "targetPort": "http"
            },
            {
                "name": "https",
                "nodePort": 32756,
                "port": 443,
                "protocol": "TCP",
                "targetPort": "https"
            }
        ],
        "selector": {
            "app": "nginx-ingress",
            "component": "controller",
            "release": "nginx-ingress"
        },
        "sessionAffinity": "None",
        "type": "LoadBalancer"
    },
    "status": {
        "loadBalancer": {}
    }
}
kubectl get ingress my-jenkins -n jenkins -o yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  creationTimestamp: "2020-02-12T09:54:54Z"
  generation: 1
  labels:
    app.kubernetes.io/component: jenkins-master
    app.kubernetes.io/instance: my-jenkins
    app.kubernetes.io/managed-by: Tiller
    app.kubernetes.io/name: jenkins
    helm.sh/chart: jenkins-1.9.16
  name: my-jenkins
  namespace: jenkins
  resourceVersion: "35664516"
  selfLink: /apis/extensions/v1beta1/namespaces/jenkins/ingresses/my-jenkins
  uid: b8604a30-4d7d-11ea-aa7f-42010a79fa0b
spec:
  rules:
  - http:
      paths:
      - backend:
          serviceName: my-jenkins
          servicePort: 8080
        path: /jenkins
status:
  loadBalancer: {}

However I am unable to access jenkins in any of the following urls:

http://13.579.24.68
https://13.579.24.68
http://13.579.24.68/jenkins
https://13.579.24.68/jenkins

edit: I have added the annotation to my ingress resource but the result remains the same:

 k get ingress my-jenkins -n jenkins -o yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: nginx
  creationTimestamp: "2020-02-12T16:00:40Z"
  generation: 1
  labels:
    app.kubernetes.io/component: jenkins-master
    app.kubernetes.io/instance: my-jenkins
    app.kubernetes.io/managed-by: Tiller
    app.kubernetes.io/name: jenkins
    helm.sh/chart: jenkins-1.9.16
  name: my-jenkins
  namespace: jenkins
  resourceVersion: "35776360"
  selfLink: /apis/extensions/v1beta1/namespaces/jenkins/ingresses/my-jenkins
  uid: d1405c90-4db0-11ea-aa7f-42010a79fa0b
spec:
  rules:
  - http:
      paths:
      - backend:
          serviceName: my-jenkins
          servicePort: 8080
        path: /jenkins
status:
  loadBalancer: {}

Any idea why is this happening?

-- pkaramol
google-cloud-platform
google-kubernetes-engine
kubernetes
kubernetes-helm
kubernetes-ingress

1 Answer

2/12/2020

You are missing the kubernetes.io/ingress.class: nginx annotation on your Ingress object for Jenkins.

From the nginx-ingress Helm Chart's documentation:

To use, add the kubernetes.io/ingress.class: nginx annotation to your Ingress resources.

-- koe
Source: StackOverflow