kubernetes - Kubernetes(Minikube):客户端和服务器之间的链接
问题描述
我正在使用 Minikube 运行一个简单的 Spring 微服务项目。我有两个项目:lucky-word-client(在 8080 端口上)和 lucky-word-server(在 8888 端口上)。但我无法与服务器通信客户端。事实上,如果lucky-word-client 与lucky-word-server 通信,结果是单词“Evviva”,否则单词是“Default”。当我在终端上运行时:minikube service lucky-client
输出是默认值,而不是 Evviva。
这是lucky-word-server的文件Dockerfile:
FROM frolvlad/alpine-oraclejdk8
ADD build/libs/common-config-server-0.0.1-SNAPSHOT.jar common-config-server.jar
EXPOSE 8888
ENTRYPOINT ["/usr/bin/java", "-Xmx128m", "-Xms128m"]
CMD ["-jar", "common-config-server.jar"]
这是lucky-word-client的文件Dockerfile:
FROM frolvlad/alpine-oraclejdk8
ADD build/libs/lucky-word-client-0.0.1-SNAPSHOT.jar lucky-word-client.jar
EXPOSE 8080
ENTRYPOINT ["/usr/bin/java", "-Xmx128m", "-Xms128m"]
CMD ["-jar", "-Dspring.profiles.active=italian", "lucky-word-client.jar"]
这是lucky-word-server的部署:
apiVersion: apps/v1
kind: Deployment
metadata:
name: lucky-server
spec:
selector:
matchLabels:
app: lucky-server
replicas: 1
template:
metadata:
labels:
app: lucky-server
spec:
containers:
- name: lucky-server
image: lucky-server-img
imagePullPolicy: Never
ports:
- containerPort: 8888
这是lucky-word-server的服务:
kind: Service
apiVersion: v1
metadata:
name: lucky-server
spec:
selector:
app: lucky-server
ports:
- protocol: TCP
port: 8888
type: NodePort
这是lucky-word-client的部署:
apiVersion: apps/v1
kind: Deployment
metadata:
name: lucky-client
spec:
selector:
matchLabels:
app: lucky-client
replicas: 1
template:
metadata:
labels:
app: lucky-client
spec:
containers:
- name: lucky-client
image: lucky-client-img
imagePullPolicy: Never
ports:
- containerPort: 8080
这是lucky-word-client的服务:
kind: Service
apiVersion: v1
metadata:
name: lucky-client
spec:
selector:
app: lucky-client
ports:
- protocol: TCP
port: 8080
type: NodePort
解决方案
正如@suren 所说,您应该在服务定义中指定目标端口。
您应该更改客户端调用的服务器的端点 URL 以反映 minikube_host_ip。有几种方法可以实现这一目标。天真的方法如下。
将服务器的 Kubernetes 服务更改为具有静态 Nodeport,如下所示:
kind: Service
apiVersion: v1
metadata:
name: lucky-server
spec:
selector:
app: lucky-server
ports:
- protocol: TCP
port: 8080
nodePort: 32002
type: NodePort
在您的客户端代码中,只需将服务器的端点更改如下: http://{minikube_host_ip}:32002 将您的 {minikube_host_ip} 替换为 minikube 主机的 IP 地址。
但是,如果您不想对 minikube ip 进行硬编码,您可以将其作为环境变量注入到您的 Kuberenetes 部署脚本中。并且应该在您的 docker 文件中捕获该环境变量。
推荐阅读
- excel - 如何在点击 Then 和 End If 语句之前退出 If?
- ios - 如何将单元格分成带有自定义标题的部分?
- r - 以 r 计算黎巴嫩的昼夜持续时间
- django - 渲染 django.forms.fields.ChoiceField 对象
- android - Android Firestore 查询集合组被跳过
- python - 当想要的标签没有分类时如何从网站收集数据?
- python - 函数,文件处理
- python - Python pandas pivot_table 显示派生指标(来自两列)
- angular - 如何让 Laravel 5.8 分页与 Angular 8 一起工作
- react-native - 在 React Native 中,在文本中间垂直对齐图标