宿主机和容器 ping 不通域名解决方法
目录
一、问题描述
二、宿主机解决方法
三、容器解决办法
一、问题描述
宿主机是Ubuntu,在宿主机上 ping
不通域名:xxxx.cn
,但是个人电脑能 ping 通。
同时宿主机上的启动的k8s容器也无法ping通。
二、宿主机解决方法
①编辑文件:/etc/systemd/resolved.conf
,取消注释并修改 DNS
行,例如:
[Resolve]
DNS=8.8.8.8
②重启 systemd-resolved
服务,并更新 /etc/resolv.conf
:
sudo systemctl restart systemd-resolved
sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
③再次ping域名,验证是否生效
三、容器解决办法
①在 yaml 文件(如:xxx_deploy.yaml
)增加 hostAliases
配置:
apiVersion: apps/v1
kind: Deployment
metadata:name: testlabels:app: test
spec:replicas: 1revisionHistoryLimit: 10strategy:type: RollingUpdaterollingUpdate:maxSurge: 1maxUnavailable: 0selector:matchLabels:app: testtemplate:metadata:labels:app: testspec:hostAliases:- ip: "xx.xx.xx.xx"hostnames:- "xxxx.cn"initContainers:- name: init-xximage: busybox:1.28.3containers:- name: testimagePullPolicy: IfNotPresentimage: xxxxxxxx# .......
②重启 pod,进入 pod ping 对应的域名,如果还是 ping 不通,那么需要在宿主机手动添加路由,手动添加路由方法如下:
1、执行以下命令手动添加路由(重启服务器会失效):
route add -net xx.xx.xx.xx netmask 255.255.0.0 gw xx.xxx.xxx.xxx
查看路由信息:route -n
2、编辑 /etc/sysconfig/static-routes
文件(没有该文件时手动新建),添加永久的静态路由
any net xx.xx.xx.xx netmask 255.255.0.0 gw xx.xxx.xxx.xxx