Как настроить Kibana (стек EFK) в кластере Azure Kubernetes с использованием обратного прокси-сервера?

Во-первых, хочу поблагодарить вас за прекрасную статью выше.

У меня есть сценарий, в котором я хочу получить некоторую помощь, поэтому я установил Elastic search, Filebeat и Kibana в кластере AKS. Теперь, поскольку я использую контроллер Nginx Ingress для отображения приложения на балансировщике нагрузки обратного прокси, который привязан к имени хоста, скажем, http://example.com

Я не могу выставлять кибану на улицу. Я получаю ошибку 404. Я попытался добавить переменную serverbasepath в развертывание кибаны и т. Д., Но все еще получаю ошибку 404.

  • имя: SERVER_BASEPATH значение: / kibana

Ниже мои настройки: 1.Ingress.yaml

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: ingress-dev
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/use-regex: "true"
    ingress.kubernetes.io/rewrite-target: /
    nginx.ingress.kubernetes.io/backend-protocol: "HTTP"
spec:
  rules:
  - host: example.com
    http:
      paths:
      - backend:
          serviceName: frontend-ui-service
          servicePort: 80
        path: /(.*)
      - backend:
          serviceName: home-micro-service
          servicePort: 3333
        path: /api-dev(/|$)(.*)
      - backend:
          serviceName: kibana-kibana
          servicePort: 5601
        path: /kibana(/|$)(.*)

2.Кибана - values.yaml

---
elasticsearchHosts: "http://elasticsearch-master:9200"

replicas: 1

# Extra environment variables to append to this nodeGroup
# This will be appended to the current 'env:' key. You can use any of the kubernetes env
# syntax here
extraEnvs:
#  - name: "NODE_OPTIONS"
#    value: "--max-old-space-size=1800"
#  - name: MY_ENVIRONMENT_VAR
#    value: the_value_goes_here

# Allows you to load environment variables from kubernetes secret or config map
envFrom: []
# - secretRef:
#     name: env-secret
# - configMapRef:
#     name: config-map

# A list of secrets and their paths to mount inside the pod
# This is useful for mounting certificates for security and for mounting
# the X-Pack license
secretMounts: []
#  - name: kibana-keystore
#    secretName: kibana-keystore
#    path: /usr/share/kibana/data/kibana.keystore
#    subPath: kibana.keystore # optional

image: "dockerRepo/docker.elastic.co/kibana/kibana"
imageTag: "7.9.1"
imagePullPolicy: "IfNotPresent"

# additionals labels
labels: {}

podAnnotations: {}
  # iam.amazonaws.com/role: es-cluster

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

protocol: http

serverHost: "0.0.0.0"

healthCheckPath: "/app/kibana"

# Allows you to add any config files in /usr/share/kibana/config/
# such as kibana.yml
kibanaConfig: {}
#   kibana.yml: |
#     key:
#       nestedkey: value

# If Pod Security Policy in use it may be required to specify security context as well as service account

podSecurityContext:
  fsGroup: 1000

securityContext:
  capabilities:
    drop:
    - ALL
  # readOnlyRootFilesystem: true
  runAsNonRoot: true
  runAsUser: 1000

serviceAccount: ""

# This is the PriorityClass settings as defined in
# https://kubernetes.io/docs/concepts/configuration/pod-priority-preemption/#priorityclass
priorityClassName: ""

httpPort: 5601

extraContainers: ""
# - name: dummy-init
#   image: busybox
#   command: ['echo', 'hey']

extraInitContainers: ""
# - name: dummy-init
#   image: busybox
#   command: ['echo', 'hey']

updateStrategy:
  type: "Recreate"

service:
  type: ClusterIP
  loadBalancerIP: ""
  port: 5601
  nodePort: ""
  labels: {}
  annotations: {}
    # cloud.google.com/load-balancer-type: "Internal"
    # service.beta.kubernetes.io/aws-load-balancer-internal: 0.0.0.0/0
    # service.beta.kubernetes.io/azure-load-balancer-internal: "true"
    # service.beta.kubernetes.io/openstack-internal-load-balancer: "true"
    # service.beta.kubernetes.io/cce-load-balancer-internal-vpc: "true"
  loadBalancerSourceRanges: []
    # 0.0.0.0/0

ingress:
  enabled: false
  annotations: {}
    # kubernetes.io/ingress.class: nginx
    # kubernetes.io/tls-acme: "true"
  path: /
  hosts:
    - chart-example.local
  tls: []
  #  - secretName: chart-example-tls
  #    hosts:
  #      - chart-example.local

readinessProbe:
  failureThreshold: 3
  initialDelaySeconds: 10
  periodSeconds: 10
  successThreshold: 3
  timeoutSeconds: 5

imagePullSecrets: []
nodeSelector: {}
tolerations: []
affinity: {}

nameOverride: ""
fullnameOverride: ""

lifecycle: {}
  # preStop:
  #   exec:
  #     command: ["/bin/sh", "-c", "echo Hello from the postStart handler > /usr/share/message"]
  # postStart:
  #   exec:
  #     command: ["/bin/sh", "-c", "echo Hello from the postStart handler > /usr/share/message"]

# Deprecated - use only with versions < 6.6
elasticsearchURL: "" # "http://elasticsearch-master:9200"

person abh.bhardwaj    schedule 29.09.2020    source источник
comment
Не могли бы вы дать мне ссылку на эту статью? Насколько я знаю, если вы хотите использовать server.basePath, вам дополнительно необходимо установить server.rewriteBasePath: true. Не могли бы вы изменить это, как указано здесь?   -  person Jakub    schedule 30.09.2020


Ответы (1)


Версия вашего изображения 7.9.1, как указано здесь

server.rewriteBasePath:

Определяет, следует ли Kibana перезаписывать запросы с префиксом server.basePath или требовать, чтобы они были перезаписаны вашим обратным прокси-сервером. В Kibana 6.3 и ранее значение по умолчанию - false. В Kibana 7.x эта настройка устарела. В Kibana 8.0 и новее значение по умолчанию - true. По умолчанию: не рекомендуется

Насколько я знаю, если вы хотите использовать server.basePath, вам дополнительно необходимо установить server.rewriteBasePath: true

Попробуйте добавить в конфиг Kibana следующее:

server.basePath: "/kibana"
server.rewriteBasePath: true

Кроме того, как упоминалось здесь @anyasabo

Вам нужно будет переопределить путь для проверки готовности в podtemplate вашего ресурса kibana. В настоящее время он жестко запрограммирован на / login


Если это не сработает, я предлагаю проверить, правильно ли настроен вход.

Например, создайте простой вход с / путем к кибане и проверьте, работает ли он.


Дополнительные ресурсы:

person Jakub    schedule 12.10.2020