Access the interface of Zeppelin in Kubernetes cluster

4/8/2019

I am trying to add Zeppelin to a Kubernetes cluster.

So, using the Zeppelin (0.8.1) docker image from apache/zeppelin, I created a K8S Deployment and Service as follow :

Deployment :

kind: Deployment
apiVersion: extensions/v1beta1
metadata:
        name: zeppelin-k8s
spec:
  replicas: 1
  selector:
    matchLabels:
      component: zeppelin-k8s
  template:
    metadata:
      labels:
        component: zeppelin-k8s
    spec:
      containers:
        - name: zeppelin-k8s
          image: apache/zeppelin:0.8.1
          ports:
            - containerPort: 8080
          resources:
            requests:
                cpu: 100m

Service :

kind: Service
apiVersion: v1
metadata:
  name: zeppelin-k8s
spec:
  ports:
    - name: zeppelin
      port: 8080
      targetPort: 8080
  selector:
    component: zeppelin-k8s

To expose the interface, I created the following Ingress :

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: minikube-ingress
  annotations:
spec:
  rules:
  - host: spark-kubernetes
    http:
      paths:
      - path: /zeppelin
        backend:
          serviceName: zeppelin-k8s
          servicePort: 8080

Using the Kubernetes dashboard, everything look fine (Deployment, Pods, Services and Replica Sets are green). There is a bunch of jersey.internal warning in the Zeppelin Pod, but it look like they are not relevant.

With all that, I expect to access the Zeppelin web interface through the URL http://[MyIP]/zeppelin.

But when I do that, I get :

HTTP ERROR 404 
Problem accessing /zeppelin. Reason:

    Not Found

What am I missing to access Zeppelin interface ?

Note :

  • I use a Minikube cluster with Kubernetes 1.14
  • I also have a Spark cluster on my K8S cluster, and I am able to access the spark-master web-ui correctly in this way (Here I have omitted the spark part in the Ingress configuration)
-- Nakeuh
apache-zeppelin
kubernetes

1 Answer

4/8/2019

Why you just don't expose your zeppelin service via NodePort?

1) update yaml as :

kind: Service
apiVersion: v1
metadata:
  name: zeppelin-k8s
spec:
  ports:
    - name: zeppelin
      port: 8080
      targetPort: 8080
  type: NodePort
  selector:
    component: zeppelin-k8s

2) Expose access by

minikube service zeppelin-k8s --url

3) Follow the link you

-- A_Suh
Source: StackOverflow