What is URL for Kibana UI

5/8/2018

http://grs-preprodkubemaster01:5601/kibana

I have followed docs and installed Kibana, When I used the service as type: LoadBalancer, the service isn't coming up, so I deleted the type: LoadBalancer and let it default to ClusterIP, it came up fine. (Note I don't have AWS) But, I am not sure how to access the UI, I tried this URL but its not working. http://my-preprodkubemaster01/api/v1/proxy/namespaces/kube-system/services/elasticsearch-logging/app/kibana any ideas how to access the Kibana UI. I checked service, deployment and everything is green check.

Another thing I tried is this URL with this URL which I got from the command kubectl cluster-info https://10.123.24.107:6443/api/v1/namespaces/kube-system/services/kibana-logging/proxy However, this is showing me this error

{
kind: "Status",
apiVersion: "v1",
metadata: { },
status: "Failure",
message: "services "kibana-logging" is forbidden: User "system:anonymous" cannot get services/proxy in the namespace "kube-system"",
reason: "Forbidden",
details: {
name: "kibana-logging",
kind: "services"
},
code: 403
}

So, as another try I used Kibana service as NodePort, but that didn't work either.

apiVersion: v1
kind: Service
metadata:
  name: kibana-logging
  namespace: kube-system
  labels:
    k8s-app: kibana-logging
    kubernetes.io/cluster-service: "true"
    addonmanager.kubernetes.io/mode: Reconcile
    kubernetes.io/name: "Kibana"
spec:
  selector:
    k8s-app: kibana-logging
  type: NodePort
  ports:
  - port: 5601
    protocol: TCP
    targetPort: ui
    nodePort: 30887

$  kubectl -n kube-system get rc,svc,cm,po
NAME                        TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
svc/elasticsearch-logging   ClusterIP   10.98.10.182     <none>        9200/TCP         12m
svc/heapster                ClusterIP   10.107.184.85    <none>        80/TCP           3d
svc/kibana-logging          NodePort    10.102.254.129   <none>        5601:30887/TCP   12m
svc/kube-dns                ClusterIP   10.96.0.10       <none>        53/UDP,53/TCP    3d
svc/kubernetes-dashboard    ClusterIP   10.105.30.246    <none>        80/TCP           3d
svc/monitoring-influxdb     ClusterIP   10.109.144.39    <none>        8086/TCP         3d

I would like to know what URL I should be using to access the Kibana UI. Please note that I have npot tried to do kubectl proxy and I would like to have it work without it

-- sbolla
efk
kibana
kubernetes

3 Answers

5/8/2018

The most common way to expose internal server outside the cluster is an Ingress.

First, you need to have an Ingress controller running in your Kubernetes cluster.
There are two types of maintained Ingress controllers - GCE and nginx

Then, you need to create a yaml file as shown below and change it according to your needs:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: test-ingress
spec:
  backend:
    serviceName: testsvc
    servicePort: 80

When you create it using kubectl create -f, you should see something like this:

$ kubectl get ingress
NAME                RULE          BACKEND        ADDRESS
test-ingress        -             testsvc:80     1.2.3.4

In this example, 1.2.3.4 is the IP allocated by Ingress controller.

When you have all things in place, you'll be able to access your application (Kibana) by IP 1.2.3.4

Please find more examples and use cases in Ingress documentation

You can also expose a Kubernetes service without using the Ingress resource:

  1. Service.Type=LoadBalancer
  2. Service.Type=NodePort
  3. Port Proxy
-- VAS
Source: StackOverflow

5/8/2018

Use the NodePort you defined in your service:

https://10.123.24.107:30887
-- Nicola Ben
Source: StackOverflow

5/11/2018

I got it to work with these changes in ingress config

    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
     name: kube
  namespace: kube-system
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.org/rewrites: "serviceName=kubernetes-dashboard rewrite=/;serviceName=kibana-logging rewrite=/"
spec:
  rules:
  - host: HOSTNAME_OF_MASTER
    http:
      paths:
      - path: /kube-ui/
        backend:
          serviceName: kubernetes-dashboard
          servicePort: 80
      - path: /kibana/
        backend:
          serviceName: kibana-logging
          servicePort: 5601

and my Kibana serive is setup as Nodeport

apiVersion: v1
kind: Service
metadata:
  name: kibana-logging
  namespace: kube-system
  labels:
    k8s-app: kibana-logging
    kubernetes.io/cluster-service: "true"
    addonmanager.kubernetes.io/mode: Reconcile
    kubernetes.io/name: "Kibana"
spec:
  type: NodePort
  ports:
  - port: 5601
    protocol: TCP
    targetPort: ui
  selector:
    k8s-app: kibana-logging

and dashboard is also configured as this

# ------------------- Dashboard Service ------------------- #
kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kube-system
spec:
  type: NodePort
  ports:
    - port: 80
      targetPort: 9090
  selector:
    k8s-app: kubernetes-dashboard

once you have the svc running you can access kibana using the NodePort from any node. Example: http://node01_ip: 31325/app/kibana

$ kubectl get svc -o wide -n=kube-system
NAME                    TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE       SELECTOR
elasticsearch-logging   ClusterIP   10.xx.120.130   <none>        9200/TCP         11h       k8s-app=elasticsearch-logging
heapster                ClusterIP   10.xx.232.165   <none>        80/TCP           11h       k8s-app=heapster
kibana-logging          NodePort    10.xx.39.255    <none>        5601:31325/TCP   11h       k8s-app=kibana-logging
kube-dns                ClusterIP   10.xx.0.xx       <none>        53/UDP,53/TCP    12h       k8s-app=kube-dns
kubernetes-dashboard    NodePort    10.xx.xx.xx   <none>        80:32086/TCP     11h       k8s-app=kubernetes-dashboard
monitoring-influxdb     ClusterIP   10.13.199.138   <none>        8086/TCP         11h       k8s-app=influxdb
-- sbolla
Source: StackOverflow