Spring boot Kubernetes-从minikube中的springboot应用程序连接弹性搜索
我正在尝试使用minikube在本地运行kubernetes closer。这是我第一次尝试kubernetes。所以 我对它的各个方面都不熟悉。 我正在尝试部署一个连接到弹性搜索服务器的SpringBoot应用程序 springboot部署.yamlSpring 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
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连接到弹性搜索,你能粘贴正确的