elasticsearch,kubernetes,Spring Boot,elasticsearch,Kubernetes" /> elasticsearch,kubernetes,Spring Boot,elasticsearch,Kubernetes" />

Spring boot Kubernetes-从minikube中的springboot应用程序连接弹性搜索

Spring boot Kubernetes-从minikube中的springboot应用程序连接弹性搜索,spring-boot,elasticsearch,kubernetes,Spring Boot,elasticsearch,Kubernetes,我正在尝试使用minikube在本地运行kubernetes closer。这是我第一次尝试kubernetes。所以 我对它的各个方面都不熟悉。 我正在尝试部署一个连接到弹性搜索服务器的SpringBoot应用程序 springboot部署.yaml apiVersion: apps/v1 kind: Deployment metadata: name: myapp labels: app: myapp spec: replicas: 1 selector: m

我正在尝试使用minikube在本地运行kubernetes closer。这是我第一次尝试kubernetes。所以 我对它的各个方面都不熟悉。 我正在尝试部署一个连接到弹性搜索服务器的SpringBoot应用程序

springboot部署.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
  labels:
    app: myapp
spec:
  replicas: 1
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
        - name: myapp
          image: myapp1:latest
          imagePullPolicy: Never
    apiVersion: apps/v1
kind: Deployment
metadata:
  name: elasticsearch
spec:
  selector:
    matchLabels:
      run: elasticsearch
  replicas: 1
  template:
    metadata:
      labels:
        run: elasticsearch
    spec:
      containers:
        - image: docker.elastic.co/elasticsearch/elasticsearch:6.6.1
          name: elasticsearch
          imagePullPolicy: IfNotPresent
          env:
            - name: discovery.type
              value: single-node
            - name: cluster.name
              value: elasticsearch
          ports:
          - containerPort: 9300
            name: nodes
          - containerPort: 9200
            name: client
弹性搜索服务器部署。yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
  labels:
    app: myapp
spec:
  replicas: 1
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
        - name: myapp
          image: myapp1:latest
          imagePullPolicy: Never
    apiVersion: apps/v1
kind: Deployment
metadata:
  name: elasticsearch
spec:
  selector:
    matchLabels:
      run: elasticsearch
  replicas: 1
  template:
    metadata:
      labels:
        run: elasticsearch
    spec:
      containers:
        - image: docker.elastic.co/elasticsearch/elasticsearch:6.6.1
          name: elasticsearch
          imagePullPolicy: IfNotPresent
          env:
            - name: discovery.type
              value: single-node
            - name: cluster.name
              value: elasticsearch
          ports:
          - containerPort: 9300
            name: nodes
          - containerPort: 9200
            name: client
公开弹性搜索服务如下

apiVersion: v1
kind: Service
metadata:
  name: elasticsearch
  labels:
    service: elasticsearch
spec:
  ports:
    - name: client
      port: 9200
      protocol: TCP
      targetPort: 9200
    - name: nodes
      port: 9300
      protocol: TCP
      targetPort: 9300
  type: NodePort

  selector:
    run: elasticsearch
同样,我也公开了springboot应用程序的服务。 现在我想知道如何从springboot服务连接到弹性搜索服务

当Springbot和elastic search在同一台机器上正常部署时(不在kubernetes中),我使用as进行连接

RestClient.builder(new HttpHost("localhost", 9200))
                .build();
从kubernetes的springboot连接到弹性搜索的最佳方式是什么

将弹性搜索服务的ip保存在环境变量中,并在springboot中使用它,还是使用弹性搜索服务的服务名称


请告知

您应该能够通过以下方式从群集中访问该服务:

群集内部的Kubernetes dns将服务名称解析为主机名。如果它们位于同一名称空间中,则可能不需要serivcenamespace

鉴于上述yaml,如果您使用elasticsearch和myapp的默认名称空间,则myapp进程可以通过以下方式连接:

http://elasticsearch:9200

您应该能够通过以下方式从群集中访问该服务:

群集内部的Kubernetes dns将服务名称解析为主机名。如果它们位于同一名称空间中,则可能不需要serivcenamespace

鉴于上述yaml,如果您使用elasticsearch和myapp的默认名称空间,则myapp进程可以通过以下方式连接:

http://elasticsearch:9200

现在,我可以从我的springboot应用程序连接到弹性搜索。 springboot无法使用连接它

相反,我将公开的弹性搜索服务的ip和端口(9200端口相当于minikube服务elasticsearch--url的输出)(节点的ip:公开的节点端口9200)传递给每个连接到弹性搜索服务的springboot请求,现在我能够连接它了

我知道这不是理想的解决方案,我不知道为什么它不能将服务名解析为ip。但至少我可以继续

如果有人能提出一些解决/诊断问题的方法,这将很有帮助

*******更新******

最后,springboot能够使用连接到弹性搜索。我不知道我做了什么改变来解决这个问题。我将elasticsearch从部署更改为状态集,如下面的yaml所示,但这一更改并没有解决此问题

我做的另一个改变是在标签上。我把它从“run”:“elasticsearch”改为“app”:“elasticsearch”,但我不知道这是否有帮助。(我将阅读更多标签更改,看看这是否有任何影响)。 请参阅elasticsearch.yaml最终文件(有关该文件的更多说明,请参阅)


现在,我可以从我的springboot应用程序连接到弹性搜索。 springboot无法使用连接它

相反,我将公开的弹性搜索服务的ip和端口(9200端口相当于minikube服务elasticsearch--url的输出)(节点的ip:公开的节点端口9200)传递给每个连接到弹性搜索服务的springboot请求,现在我能够连接它了

我知道这不是理想的解决方案,我不知道为什么它不能将服务名解析为ip。但至少我可以继续

如果有人能提出一些解决/诊断问题的方法,这将很有帮助

*******更新******

最后,springboot能够使用连接到弹性搜索。我不知道我做了什么改变来解决这个问题。我将elasticsearch从部署更改为状态集,如下面的yaml所示,但这一更改并没有解决此问题

我做的另一个改变是在标签上。我把它从“run”:“elasticsearch”改为“app”:“elasticsearch”,但我不知道这是否有帮助。(我将阅读更多标签更改,看看这是否有任何影响)。 请参阅elasticsearch.yaml最终文件(有关该文件的更多说明,请参阅)


我试过了。它抛出
java.net.ConnectException:org.elasticsearch.client.RestClient$SyncResponseListener.get(RestClient.java:952)~[elasticsearch-rest-client-6.6.1.jar:6.6.1]在org.elasticsearch.client.RestClient.performRequest(RestClient.java:229)~[elasticsearch-rest-client-6.6.1.jar:6.6.1]在org.elasticsearch.client.RestClient.performRequest(RestClient.java:323)~[elasticsearch-rest-client-6.6.1.jar:6.6.1]
在线客户端.performRequest(“GET”,“/\u search”,Collections.emptyMap(),新的StringEntity(查询,ContentType.APPLICATION\u JSON)但是我可以使用我尝试过的ip直接连接到弹性搜索。它在org.elasticsearch.client.RestClient$SyncResponseListener.get(RestClient.java:952)~[elasticsearch-rest-client-6.6.1.jar:6.6.1]的org.elasticsearch.client.RestClient.performRequest(RestClient.java:229)上抛出
java.net.ConnectException:Connection拒绝连接~[elasticsearch-rest-client-6.6.1.jar:6.6.1]位于org.elasticsearch.client.RestClient.performRequest(RestClient.java:323)~[elasticsearch-rest-client-6.6.1.jar:6.6.1]
在线客户端.performRequest(“GET”,“/\u search”,Collections.emptyMap(),新的StringEntity(查询,ContentType.APPLICATION\u JSON)但是我可以直接使用ip连接到弹性搜索,你能粘贴正确的