Cloud Native 6 min read

How to Deploy Secure Kibana on Kubernetes Using Helm and Private Harbor

This guide walks you through the prerequisites, Helm chart acquisition, private Harbor upload, TLS secret creation, detailed Helm values configuration, and final deployment and verification steps to set up a secure, production‑ready Kibana monitoring platform on a Kubernetes cluster.

Linux Ops Smart Journey
Linux Ops Smart Journey
Linux Ops Smart Journey
How to Deploy Secure Kibana on Kubernetes Using Helm and Private Harbor

In modern monitoring systems, Kibana is the visualization tool for Elasticsearch, and containerized deployment has become mainstream. This article demonstrates how to quickly deploy Kibana on a Kubernetes cluster using Helm and integrate it with a private Harbor registry.

Prerequisites

Standardized Helm chart deployment

Available Kubernetes cluster

Available Elasticsearch cluster

Private Harbor registry for secure images

Cert‑Manager for automatic SSL certificate management

Nginx Ingress for fine‑grained routing

Obtain Kibana Chart Package

Download Kibana chart

<code>
$ helm repo add elastic https://helm.elastic.co
"elastic" has been added to your repositories

$ helm pull elastic/kibana --version 7.17.3
</code>

Upload to internal Harbor service

<code>
$ helm push kibana-7.17.3.tgz oci://core.jiaxzeng.com/plugins
Pushed: core.jiaxzeng.com/plugins/kibana:7.17.3
Digest: sha256:169f9041f998086df3af446bd79a5b04c569f33980ef5fb3ce18639fc3f966f5
</code>

Install Kibana

Upload Elasticsearch TLS certificate

<code>
$ kubectl -n obs-system create secret generic es-ca-tls --from-file=/home/ops/certificates-ca.crt
secret/es-ca-tls created
</code>
Command to extract the ES CA certificate from a p12 file: openssl pkcs12 -in elastic-certificates.p12 -cacerts -nokeys -chain -out certificates-ca.crt

Deep dive into values.yaml

<code>
fullnameOverride: kibana
replicas: 1  # number of replicas
image: "core.jiaxzeng.com/library/kibana"  # private image path
serverHost: "0.0.0.0"  # allow all nodes in the cluster
httpPort: 5601  # service port
elasticsearchHosts: "https://elasticsearch.obs-system.svc:9200"  # ES address

kibanaConfig:
  kibana.yml: |
    server.rewriteBasePath: "true"
    server.basePath: "/kibana"
    server.publicBaseUrl: "http://ops.jiaxzeng.com/kibana"
    elasticsearch.ssl.certificateAuthorities: "/usr/share/kibana/pki/certificates-ca.crt"
    elasticsearch.hosts: "https://elasticsearch.obs-system.svc:9200"
    elasticsearch.ssl.verificationMode: "certificate"

healthCheckPath: "/kibana"  # health check path

secretMounts:
- name: es-ca-cert
  secretName: es-ca-tls
  path: /usr/share/kibana/pki

extraEnvs:
- name: 'ELASTICSEARCH_USERNAME'
  valueFrom:
    secretKeyRef:
      name: elastic-credentials
      key: username
- name: 'ELASTICSEARCH_PASSWORD'
  valueFrom:
    secretKeyRef:
      name: elastic-credentials
      key: password

resources:
  requests:
    cpu: "1000m"
    memory: "2Gi"
  limits:
    cpu: "1000m"
    memory: "2Gi"

ingress:
  enabled: true
  className: "nginx"
  pathtype: ImplementationSpecific
  annotations:
    cert-manager.io/cluster-issuer: ca-cluster-issuer
  hosts:
  - host: ops.jiaxzeng.com
    paths:
    - path: /kibana
  tls:
  - secretName: ops.jiaxzeng.com-tls
    hosts:
    - ops.jiaxzeng.com
</code>
The secret contains the ES CA certificate extracted from the ES cluster. Environment variables provide ES user authentication; create corresponding secrets if ES is not containerized or resides in a different namespace.

Deploy Kibana

<code>
$ helm -n obs-system install kibana -f /etc/kubernetes/addons/kibana-values.yaml oci://core.jiaxzeng.com/plugins/kibana --version 7.17.3
Pulled: core.jiaxzeng.com/plugins/kibana:7.17.3
Digest: sha256:169f9041f998086df3af446bd79a5b04c569f33980ef5fb3ce18639fc3f966f5
NAME: kibana
LAST DEPLOYED: Mon Mar 10 16:14:45 2025
NAMESPACE: obs-system
STATUS: deployed
REVISION: 1
TEST SUITE: None
</code>

Verify Kibana

Check pod status

<code>
$ kubectl -n obs-system get pod -l app=kibana
NAME                     READY   STATUS    RESTARTS   AGE
kibana-85ff769865-n2b69 1/1     Running   0          83s
</code>

Access Kibana via browser

Administrator password and Kibana’s Elasticsearch credentials are identical.

Conclusion

By following these steps you have built a secure and reliable Kibana monitoring platform. It is recommended to regularly scan container images with tools such as Trivy and continuously optimize the monitoring system.

cloud nativeKubernetesTLSKibanaHarborHelm
Linux Ops Smart Journey
Written by

Linux Ops Smart Journey

The operations journey never stops—pursuing excellence endlessly.

0 followers
Reader feedback

How this landed with the community

login Sign in to like

Rate this article

Was this worth your time?

Sign in to rate
Discussion

0 Comments

Thoughtful readers leave field notes, pushback, and hard-won operational detail here.