Kubernetes pods无法解析运行weave CNI的集群内的私有IP地址

Kubernetes pods无法解析运行weave CNI的集群内的私有IP地址,kubernetes,Kubernetes,服务定义 apiVersion:v1 种类:服务 元数据: 名称:zevrant-oauth2-service-db 规格: 端口: -港口:5432 目标港:5432 选择器: app:zevrant-oauth2-service-db --- apiVersion:apps/v1 种类:部署 元数据: 名称:zevrant-oauth2-service-db-deployment 标签: app:zevrant-oauth2-service-db 规格: 副本:1份 选择器: 火柴标签: a

服务定义

apiVersion:v1 种类:服务 元数据: 名称:zevrant-oauth2-service-db 规格: 端口: -港口:5432 目标港:5432 选择器: app:zevrant-oauth2-service-db --- apiVersion:apps/v1 种类:部署 元数据: 名称:zevrant-oauth2-service-db-deployment 标签: app:zevrant-oauth2-service-db 规格: 副本:1份 选择器: 火柴标签: app:zevrant-oauth2-service-db 模板: 元数据: 标签: app:zevrant-oauth2-service-db 规格: 你的秘密: -姓名:regcred 卷数: -名称:数据库 nfs: 服务器:192.168.0.127 路径:/i-data/420aa917/nfs/keys 节点选择器: 架构:arm 容器: -名称:zevrant-oauth2-service-db 图片:postgres:最新 体积数量: -名称:数据库 挂载路径:/storage/keys/ 环境: -姓名:POSTGRES_密码 价值来源: secretKeyRef: 名称:oauth db密码 密钥:密码 -姓名:PGDATA 值:/storage/keys/db/$ENVIRONMENT/oauth2/ -姓名:POSTGRES_用户 价值:泽夫兰特 -姓名:POSTGRES_DB 值:oauth2 端口: -集装箱港口:5432 群集详细信息

zevrant@master-节点:~$kubectl get svc-o wide-n kube system | grep dns
kube dns ClusterIP 10.96.0.10 53/UDP、53/TCP、9153/TCP 10h k8s app=kube dns
zevrant@master-节点:~$kubectl get pod-o wide-n kube系统| grep dns
coredns-66bff467f8-nq5jv 1/1运行150m 10.32.0.7 zevrant
coredns-66bff467f8-tljmr 1/1运行1 10h 10.40.0.1主节点
kubectl获得svc-o宽
名称类型CLUSTER-IP外部IP端口年龄选择器
ingress节点端口开发节点端口10.99.251.215 8080:30124/TCP 10h app=zevrant home ui
zevrant-oauth2-service-db ClusterIP 10.97.75.171 5432/TCP 9h app=zevrant-oauth2-service-db
主节点和工作节点的coredns日志包括

:53
[信息]插件/重新加载:运行配置MD5=4E235FCC36966E76816BCD9034EBC7
CoreDNS-1.6.7
linux/amd64,go1.13.6,da7f65b
查询目的地服务

泽夫兰特之家酒店-ui@zevrant-home-ui-deployment-79c7dbb78-gksn8:/$dig@10.96.0.10 zevrant-oauth2-service-db ; 挖掘9.11.3-1ubuntu1.12-Ubuntu@10.96.0.10 zevrant-oauth2-service-db ; (找到1台服务器) ;; 全局选项:+cmd ;; 得到答案:
;; ->>标题基于您共享的
dig
输出
zevrant-oauth2-service-db
正在解析为
92.242.140.2
,但看起来您的K8s服务的IP地址是
10.97.75.171
(ClusterIP)(也基于您共享的输出)

如果您点击
10.97.75.171 5432
,您应该能够访问您的Postgres数据库,前提是您没有任何Kubernetes网络策略和/或防火墙阻止访问。确保在Postgres配置中将服务器绑定到
0.0.0.0
,否则,如果服务器类似于
localhost
,则只能从pod访问它


所以问题是什么是
92.242.140.2
?Wny是coredns,它用
92.242.140.2
响应对
zevrant-oauth2-service-db
的查询?coredns中是否配置了DNS转发器?是否配置了不属于
svc.cluster.local
的默认域?

基于您共享的
dig
输出
zevrant-oauth2-service-db
正在解析为
92.242.140.2
,但您的K8s服务的IP地址似乎是
10.97.75.171
(ClusterIP)(也基于您共享的输出)

如果您点击
10.97.75.171 5432
,您应该能够访问您的Postgres数据库,前提是您没有任何Kubernetes网络策略和/或防火墙阻止访问。请确保您在Postgres配置中将服务器绑定到
0.0.0
,否则,如果类似于
localhost
,您将只能从吊舱里找到它


因此,问题是什么是
92.242.140.2
?Wny是coredns用
92.242.140.2
响应对
zevrant-oauth2-service-db
的查询吗?coredns中是否配置了DNS转发器?是否配置了默认域,该域不属于
svc.cluster.local

解决方案最终是运行在主节点和所有从节点上执行以下命令。当群集上的网络设置发生更改时,都需要执行这些命令

sysctl net.ipv4.conf.all.forwarding=1
 iptables -P FORWARD ACCEPT
 iptables -P FORWARD ACCEPT
 iptables -P OUTPUT ACCEPT
 systemctl stop kubelet
 systemctl stop docker
 iptables --flush
 iptables -tnat --flush
 systemctl start kubelet
 systemctl start docker

解决方案最终是在主节点和所有从节点上运行以下命令。每当集群上的网络设置发生更改时,都需要这样做

sysctl net.ipv4.conf.all.forwarding=1
 iptables -P FORWARD ACCEPT
 iptables -P FORWARD ACCEPT
 iptables -P OUTPUT ACCEPT
 systemctl stop kubelet
 systemctl stop docker
 iptables --flush
 iptables -tnat --flush
 systemctl start kubelet
 systemctl start docker

你说的“UI pod”是什么意思?我这样问是因为,如果用户界面提供的是运行在客户端机器上的react应用程序之类的服务,并且如果用户界面试图访问pod中运行的后端服务,则需要确保ingress将允许在pod中执行通信ini,以测试连接到数据库入口的能力,但这是不必要的s场景您可以使用
weave report
生成转储并将其发布到您的问题中吗?另外
weave status dns
可能有助于根据请求发布更新“UI pod”是什么意思?我这样问是因为如果用户界面提供的服务类似于客户端机器上运行的react应用程序,如果它试图访问pod中运行的后端服务,则需要确保入口允许ini执行int
NAME                                                    READY   STATUS             RESTARTS   AGE
zevrant-home-ui-deployment-79c7dbb78-gksn8              1/1     Running            0          16h
zevrant-home-ui-deployment-79c7dbb78-zgp4c              1/1     Running            0          16h
zevrant-oauth2-service-db-deployment-6f7c7ccdb5-5g599   1/1     Running    

    0          19m
sysctl net.ipv4.conf.all.forwarding=1
 iptables -P FORWARD ACCEPT
 iptables -P FORWARD ACCEPT
 iptables -P OUTPUT ACCEPT
 systemctl stop kubelet
 systemctl stop docker
 iptables --flush
 iptables -tnat --flush
 systemctl start kubelet
 systemctl start docker