【发布时间】:2018-07-19 04:35:37
【问题描述】:
我正在尝试使用在 minikube 安装上运行的 k8s 运行两个服务。
所以我有服务Foo和Bar,所以当我访问服务Foo时,它必须触发服务Bar来获取数据。
这里是Foo服务的部署配置
foo-deployment.yaml:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: foo-server
labels:
app: foo-server
spec:
replicas: 1
template:
metadata:
labels:
app: foo-server
serving: "true"
spec:
containers:
- name: foo-server
image: foo-container
env:
- name: BAR_SERVICE_URL
value: http://bar-server:8081
ports:
- containerPort: 8080
name: http
foo-svc.yaml:
apiVersion: v1
kind: Service
metadata:
name: foo-server
labels:
app: foo-server
spec:
type: NodePort
ports:
- port: 8080
targetPort: 8080
name: http
selector:
app: foo-server
serving: "true"
BAR_SERVICE_URL evn 变量在Foo 内部使用,因此服务知道Bar 的主机。
这是Bar服务的服务配置
bar-svc.yaml:
apiVersion: v1
kind: Service
metadata:
name: bar-server
labels:
app: bar-server
spec:
type: NodePort
ports:
- port: 8081
targetPort: 8081
name: http
selector:
app: bar-server
bar-deployment.yaml:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: bar-server-v1
labels:
app: bar-server
version: "1.0"
spec:
replicas: 2
template:
metadata:
labels:
app: bar-server
version: "1.0"
serving: "true"
spec:
containers:
- name: bar-server
image: bar-container
ports:
- containerPort: 8081
name: http
当我使用 minikube ip 和暴露的服务端口访问 Foo 服务时,我在 pod 日志中收到以下错误:
2018-02-08 14:32:25.875 ERROR 1 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.web.client.ResourceAccessException: I/O error on GET request for "http://bar-server:8081/endpoint": bar-server; nested exception is java.net.UnknownHostException: bar-server] with root cause
java.net.UnknownHostException: bar-server
但是,我可以使用 minikube ip 和暴露的端口访问bar-server/endpoint http://192.168.99.100:31168/endpoint。
看来我可以从集群外部访问Foo 和Bar 服务。但是Foo服务无法解析Bar服务主机,无法访问。
UPD:以下是一些包含故障排除细节的更新。
- 在
minikube上启用kube-dns插件。 - 尝试从
Foopod 到wget到Bar服务端点。我可以通过bar-server的IP 地址来实现,但bar-server:8081/endpoint不行。 -
尝试
nslookup kubernetes.default.svc.cluster.local localhost看起来不错。这是输出:服务器:127.0.0.1 地址一:127.0.0.1 localhost
-
dnspod 也已启动并运行。这是kubectl get pods -n=kube-system | grep -i dns的输出kube-dns-6777479f6b-vxd7m 3/3 运行 9 1d
【问题讨论】:
-
嗨,Sergii,你能解决这个问题吗?我在自己的 Minikube 部署中遇到了类似的问题。
-
与最新的 Minikube 和 Core DNS 有同样的问题
-
@alexvicegrab 我的情况是我没有做
minikube delete就更新了minikube,所以通过删除minikube集群并重新启动它来修复它 -
感谢您的快速回答!在我自己的情况下,在使用 Minikube 时,Peer 如何与 K8S 上的服务交互似乎存在一些问题。当我在云上使用真正的 K8S 集群时,同样的事情完全可以正常工作。
标签: dns kubernetes service-discovery minikube kube-dns