首页 > 解决方案 > 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

标签: kubernetesmicroservicesminikube

解决方案


正如@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 文件中捕获该环境变量。


推荐阅读