【问题标题】:Access Elasticsearch from minikube/kubernetes从 minikube/kubernetes 访问 Elasticsearch
【发布时间】:2019-12-16 07:40:50
【问题描述】:

我有一个 Spring Boot 应用程序,它使用 minikube 部署在本地 Windows 机器上的 Kubernetes 中。我还在我的本地机器上运行 Elasticsearch (http://localhost:9200)。 我想从这个 Spring Boot 应用程序中调用 Elasticsearch REST 端点。 我尝试通过创建一个没有选择器的服务来解决这个问题,但不确定我错过了什么。

当使用http://#minikube_ip#:#Node_Port# 访问 Spring Boot 应用程序时,我收到错误“No route to host”。

我尝试做 minikube ssh 并执行 curl 命令,从那里我也得到了同样的错误。显然我在这里遗漏了一些东西。

application.yaml

elasticsearch:
 hosts:
  - http://my-es:80
 connectTimeout: 10000
 connectionRequestTimeout: 10000
 socketTimeout: 10000
 maxRetryTimeoutMillis: 60000

deployment.yaml

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: kube-es-app
spec:
  progressDeadlineSeconds: 600
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      run: kube-es-app
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      creationTimestamp: null
      labels:
        run: kube-es-app
    spec:
      containers:
        - image: elastic-search-app:latest
          imagePullPolicy: Never
          name: kube-es-app
          ports:
            - containerPort: 8080
              protocol: TCP
          resources: {}
          terminationMessagePath: /dev/termination-log
          terminationMessagePolicy: File
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      terminationGracePeriodSeconds: 30
---
kind: Service
apiVersion: v1
metadata:
  name: my-es
spec:
  ports:
    - protocol: TCP
      port: 80
      targetPort: 9200
---
kind: Endpoints
apiVersion: v1
metadata:
  name: my-es
subsets:
  - addresses:
      - ip: <MY_LOCAL_MACHINE_IP>
    ports:
      - port: 9200

我执行的命令

docker build -t elastic-search-app .

kubectl create -f deployment.yaml

kubectl 暴露部署/kube-es-app --type="NodePort" --port 8080

有人可以帮忙吗?我被卡住了

【问题讨论】:

  • 您是否尝试从部署在 kubernestes 上的 sping 应用程序访问在 localhost:9200 上运行的 elasticsearch 实例,我正确吗?
  • 是的。来自我本地机器上的 minikube
  • 禁用 Windows 防火墙后是否有效?

标签: spring spring-boot elasticsearch kubernetes minikube


【解决方案1】:

如果我的描述正确,Windows 机器应该有 vbox 网络适配器连接到 Minikube VM 连接到的仅主机网络。

Minikube 可以直接访问主机,因为它们都在同一个网络中。

Minikube 负责外部 Pod 的 NAT-ting 包。您需要的是允许 Elasticsearch 监听 vbox 或所有接口,并在 Windows 防火墙中启用其端口。然后 Elasticsearch 应该可以通过 Host-only-network 中的 Windows 的 IP 地址使用。

除此之外,您可以创建一个服务(如果您需要按名称而不是 IP),如下所述:

Connect to local database from inside minikube cluster,

Minikube:Exposing mysql as a service on localhost

【讨论】:

  • 谢谢@mebius99。我想我完全遵循了您提供的第二个链接中提到的内容
  • 嗨,SCcoder,如果有帮助,您应该考虑投票/接受答案。 stackoverflow.com/help/someone-answers
  • 如果有人提供解决方案,我肯定会。 mebius99 的回答很有帮助,但正如我所提到的,我遵循相同的步骤仍然面临这个问题。
猜你喜欢
  • 2017-07-13
  • 2017-04-04
  • 2021-09-17
  • 2020-07-15
  • 1970-01-01
  • 2020-08-24
  • 2018-01-26
  • 1970-01-01
  • 2019-10-27
相关资源
最近更新 更多