使用Kibana Helm Chart查看OpenSearch服务的数据(仅适用于VPC访问)

如果要从VPC外部访问VPC中的Elasticsearch集群并连接到Kibana的话。

    • SSH トンネルを使用する

 

    • プロキシを使用する

 

    VPN を使う

有多种方法可以被列出。

 

不论哪种方法,建设、管理和运营的成本都很高。

因此,本文将介绍如何使用Kibana Helm Chart,在EKS集群内的Pod中访问Elasticsearch数据。需要注意的是,由于使用了Argo CD来管理Helm Chart,所以这是基于该前提的步骤。

环境

    • Kubernetes version 1.21

 

    • Platform version eks.7

 

    • Elasticsearch 7.10

 

    Argo CD v2.3.3

我正在使用OpenSearch Service来使用Elasticsearch。尽管我正在迁移到OpenSearch,但应该可以使用几乎相同的步骤进行引入,但这尚未经过验证。

构成

kibana.drawio.png

操作步骤

首先,确认 EKS 集群内的 Pod 能够访问到域名终端点。

❯ curl https://vpc-xxx.ap-northeast-1.es.amazonaws.com
{
  "name" : "xxx",
  "cluster_name" : "xxx",
  "cluster_uuid" : "xxx",
  "version" : {
    "number" : "7.10.2",
    "build_flavor" : "oss",
    "build_type" : "tar",
    "build_hash" : "unknown",
    "build_date" : "2021-09-29T11:42:59.634166Z",
    "build_snapshot" : false,
    "lucene_version" : "8.7.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

只要返回包含集群名称和版本信息的数据,就没有问题。
另外,可以在控制台或AWS CLI中查看域终端节点。

❯ aws opensearch describe-domain --domain-name xxx
{
    "DomainStatus": {
        ...
        "Endpoints": {
            "vpc": "vpc-xxx.ap-northeast-1.es.amazonaws.com" # これ
        },
        ...
    }
}

安装Helm Chart。

 

如果已经迁移到OpenSearch,这里也有一个选项。

 

如果您使用Helm命令,您可以在 Argo CD 中添加应用程序和图表,请确认此处。

---
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: kibana-test
  namespace: argocd
  finalizers:
    - resources-finalizer.argocd.argoproj.io
spec:
  project: default
  source:
    repoURL: https://helm.elastic.co
    chart: kibana
    targetRevision: 7.10.2
    helm:
      values: |
        image: "docker.elastic.co/kibana/kibana-oss"
        imageTag: "7.10.2"
        imagePullPolicy: "IfNotPresent"
        elasticsearchHosts: "https://vpc-xxx.ap-northeast-1.es.amazonaws.com"
  destination:
    server: 'https://kubernetes.default.svc'
    namespace: default
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
关于 Kibana 映像的补充说明
由于默认的映像在以下错误中无法启动 Pod,因此我们指定了 OSS 版本的映像。
Failed to parse mapping [_doc]: No handler for type [flattened] declared on field [config]
可能的原因如下,请详细的人士在评论中告知。
https://github.com/elastic/kibana/issues/52324#issuecomment-592063291
正如在此问题中指出的那样,默认的 Kibana 启用了一个名为 x-pack 的付费选项,但 Opensearch Service 不支持此选项,因此由于不一致而发生错误。如果使用 OSS 版本的 Kibana,则不包含付费选项,因此能够启动。
image.png

通过端口转发,访问Kibana的Web用户界面。

❯ k port-forward kibana-test-kibana-d4fc8cb48-xs7xl 8081:5601 -n default
Forwarding from 127.0.0.1:8081 -> 5601
Forwarding from [::1]:8081 -> 5601
image.png

Kibana Helm Chart には Ingress の有効化オプションがあります。annotation を付与することで AWS Load Balancer Controller2 と組み合わせたり、Cognito で認証を挟むことができます。こうすることで VPC 外部からも安全にアクセスできます。

由于涉及到每个运营商的话题,进一步详细讨论将使文章变得过于长篇,因此我们将以发布最终配置清单来结束本文。

---
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: kibana-test
  namespace: argocd
  finalizers:
    - resources-finalizer.argocd.argoproj.io
spec:
  project: default
  source:
    repoURL: https://helm.elastic.co
    chart: kibana
    targetRevision: 7.10.2
    helm:
      values: |
        elasticsearchHosts: "https://vpc-xxx.ap-northeast-1.es.amazonaws.com"
        image: "docker.elastic.co/kibana/kibana-oss"
        imageTag: "7.10.2"
        imagePullPolicy: "IfNotPresent"
        ingress:
          enabled: "true"
          className: ""
          hosts:
            - host: "kibana-xxx.xxx.jp"
              paths:
                - path: "/*"
          pathtype: "ImplementationSpecific"
          annotations:
            kubernetes.io/ingress.class: "alb"
            alb.ingress.kubernetes.io/scheme: "internet-facing"
            alb.ingress.kubernetes.io/target-type: "ip"
            alb.ingress.kubernetes.io/backend-protocol: "HTTP"
            alb.ingress.kubernetes.io/healthcheck-protocol: "HTTP"
            alb.ingress.kubernetes.io/healthcheck-port: "5601"
            alb.ingress.kubernetes.io/healthcheck-path: "/api/status"
            alb.ingress.kubernetes.io/auth-type: "cognito"
            alb.ingress.kubernetes.io/auth-scope: "openid"
            alb.ingress.kubernetes.io/auth-session-timeout: "3600"
            alb.ingress.kubernetes.io/auth-session-cookie: "AWSELBAuthSessionCookie"
            alb.ingress.kubernetes.io/auth-on-unauthenticated-request: "authenticate"
            alb.ingress.kubernetes.io/certificate-arn: "arn:aws:acm:ap-northeast-1:xxx:certificate/xxx"
            alb.ingress.kubernetes.io/auth-idp-cognito: "{\"UserPoolArn\":\"arn:aws:cognito-idp:ap-northeast-1:xxx:userpool/ap-northeast-1_xxx\",\"UserPoolClientId\":\"xxx\",\"UserPoolDomain\":\"xxx\"}"
            external-dns.alpha.kubernetes.io/hostname: "kibana-xxx.xxx.jp"
  destination:
    server: 'https://kubernetes.default.svc'
    namespace: default
  syncPolicy:
    automated:
      prune: true
      selfHeal: true

記事を書くためにマニフェストを書き換えたので、もし動かなかったらコメントで教えて下さい。

https://discuss.elastic.co/t/elasticsearch-oss-image-and-x-pack-plugin/266169/3 ↩https://kubernetes-sigs.github.io/aws-load-balancer-controller/v2.4/ ↩

请提供以下内容的中文本地化版本,只需要一种选择:

https://discuss.elastic.co/t/elasticsearch-oss-image-and-x-pack-plugin/266169/3 ↩

https://kubernetes-sigs.github.io/aws-load-balancer-controller/v2.4/ ↩

广告
将在 10 秒后关闭
bannerAds