使用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,但应该可以使用几乎相同的步骤进行引入,但这尚未经过验证。
构成
操作步骤
首先,确认 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
由于默认的映像在以下错误中无法启动 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,则不包含付费选项,因此能够启动。
通过端口转发,访问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
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/ ↩