Kubernetes(Minikube):客户端和服务器之间的链接



我正在使用Minikube运行一个简单的spring微服务项目。我有两个项目:lucky-word-client(在端口8080上(和lucky-word-server(在端口8888上(。但是我无法将客户端与服务器通信。事实上,如果幸运词客户端与幸运词服务器通信,结果是单词"Evviva",否则单词是"默认"。当我在终端上运行时:minikube service lucky-client输出是默认的,而不是 Evviva。

这是幸运词服务器的文件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"]

这是幸运词客户端的文件 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"]

这是幸运词服务器的部署:

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

这是幸运词服务器的服务:

kind: Service
apiVersion: v1
metadata:
name: lucky-server
spec:
selector:
app: lucky-server
ports:
- protocol: TCP
port: 8888
type: NodePort

这是幸运词客户端的部署:

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

这是幸运词客户端的服务:

kind: Service
apiVersion: v1
metadata:
name: lucky-client
spec:
selector:
app: lucky-client
ports:
- protocol: TCP
port: 8080
type: NodePort

如@suren所述,您应该在服务定义中指定目标端口。

并且应更改客户端调用以反映minikube_host_ip的服务器的终结点 URL。有几种方法可以实现这一点。朴素的方法如下。

将服务器的 Kubernetes 服务更改为具有静态节点端口,如下所示:

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进行硬编码,则可以将其作为环境变量注入到Kuberenets部署脚本中。并且该环境变量应该在您的 docker 文件中捕获。

您的服务现在正在将请求发送到端口 80。您需要指定参数targetPort。应如下所示:

kind: Service
apiVersion: v1
metadata:
name: lucky-server
spec:
selector:
app: lucky-server
ports:
- protocol: TCP
targetPort: 8888  #this is your container port. where to send the requests
port: 8888   #this is the service port. it is running on svc-ip:8888
type: NodePort

您应该对其他服务执行相同的操作。同时检查服务端口。现在是在 8080 和 8888 上。您可能会在端口 80 上击中它们。

可能会有更多的问题,但就目前而言,这些问题肯定会引起问题。

相关内容

最新更新