gpt4 book ai didi

dns - Kubernetes 服务发现无法解析 minikube 上的服务主机

转载 作者:行者123 更新时间:2023-12-04 13:40:21 25 4
gpt4 key购买 nike

我正在尝试使用在 minikube 安装上运行的 k8s 运行两个服务。
所以我有服务 FooBar ,所以当我访问服务时 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

当我访问 Foo 时使用 minikube ip 和暴露的服务端口创建服务,我在 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

但是,我可以访问 bar-server/endpoint像这样使用 minikube ip 和暴露的端口 http://192.168.99.100:31168/endpoint .

所以看起来我可以访问 FooBar来自集群外部的服务。但是 Foo服务无法解决 Bar服务主机并且无法访问它。

UPD :这里有一些关于故障排除细节的更新。
  • minikube kube-dns插件已启用。
  • Foo 的侧面尝试 pods 到 wgetBar服务端点。我可以通过 bar-server 的 IP 地址来做到这一点但不是 bar-server:8081/endpoint .
  • 正在尝试 nslookup kubernetes.default.svc.cluster.local localhost看起来挺好的。这是输出:

    服务器:127.0.0.1
    地址 1:127.0.0.1 本地主机
  • 还有 dns pod 查找并运行。这是 kubectl get pods -n=kube-system | grep -i dns 的输出

    kube-dns-6777479f6b-vxd7m 3/3 运行 9 1d
  • 最佳答案

    Kubernetes 使用 DNS ( kube-dns ) 进行服务发现。如果 k8s 中的 DNS 工作正常,服务 Foo应该可以pingcurl服务Bar ,反之亦然。

    一种检查是否 kube-dns 的方法正在工作是查看以下命令是否在任何 pod 中工作:

    nslookup kubernetes.default.svc.cluster.local localhost
    nslookup kubernetes.default localhost
    kube-dns可以在以下输出中检查 pod 的健康状况:
    kubectl get pods -n=kube-system | grep -i dns

    关于dns - Kubernetes 服务发现无法解析 minikube 上的服务主机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48688339/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com