首页 > 解决方案 > Minikube Kubernetes:两个 pod 和服务

问题描述

我正在使用 Minikube 运行一个简单的 Spring 微服务项目。我有两个项目:lucky-word-client(在 8080 端口上)和 lucky-word-server(在 8888 端口上)。但我无法与服务器通信客户端。事实上,如果 lucky-word-client 与 lucky-word-server 通信,结果是单词“Evviva”,否则单词是“Default”。当我在终端上运行时:minikube service lucky-client 输出是默认值,而不是 Evviva。我想通过 DNS 与服务器通信客户端。我看到了指南:https ://kubernetes.io/docs/concepts/services-networking/dns-pod-service/但没有成功。我如何修改服务或 pod 以在客户端和服务器之间建立链接?

这是lucky-word-client 的pod:

apiVersion: v1
kind: Pod
metadata:
  name: lucky-client
  namespace: default
spec:
  containers:
  - image: lucky-client-img
    imagePullPolicy: IfNotPresent
    name: lucky-client

这是lucky-word-server 的pod:

apiVersion: v1
kind: Pod
metadata:
  name: lucky-server
  namespace: default
spec:
  containers:
  - image: lucky-server-img
    imagePullPolicy: IfNotPresent
    name: lucky-server

这是服务,lucky-word-client 与 lucky-word-server 通信:

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

标签: kubernetesmicroservicesminikube

解决方案


如果您希望基于 DNS 的服务发现与服务器进行通信,请按照以下步骤操作:

  1. minikube addons enable kube-dns通过命令启用 kube-dns 插件。这将在您的 Kubernetes 集群中启用服务发现。
  2. 确保使用minikube addons list命令启用 kube-dns 插件。
  3. 在您的客户端应用程序代码中,将服务器 URL 端点更改为以下内容:http://lucky-server:8888。“lucky-server”是Kubernetes 服务器服务 yaml 定义的metadata.name属性。
  4. 否则,lucky-server您可以在服务器 URL 中使用完全限定名称lucky-server.default.svc.cluster.local,因为您将服务部署在默认命名空间中。

推荐阅读