虚拟机部署了容器 Docker 和 Kubernetes (K8S) 后,应正确设置域名转发,否则无法正确使用数据中心提供的存储(NAS)、数据库租户等服务。
数据中心提供的存储(NAS)、数据库租户服务,均使用域名方式访问,严禁使用固定IP地址访问这些服务。
域名转发是指将特定域名的 DNS 查询请求发送到指定的 DNS 服务器的过程。这对于确保容器中应用能够正确解析外部服务的地址至关重要。
数据中心接受容器域名解析转发的 DNS 服务器为:202.116.64.1 和 202.116.64.2
当然,下面是一个关于如何在使用 Docker 和 Kubernetes 部署应用时正确设置域名转发的技术支持 FAQ。这份 FAQ 包含了基本的概念解释、配置步骤以及常见问题解答。
以下设置方法仅供参考,容器管理员应根据自己的情况做出判断,及选用恰当的 DNS 转发设置。配置案例中,除 202.116.64.1 和 202.116.64.2 外,所有域名均为假设。
在 Docker 中如何设置域名转发
1. 使用 Docker 守护进程配置
编辑 Docker 守护进程配置文件(通常位于 /etc/docker/daemon.json)。
添加或修改 dns 属性,指定您希望使用的 DNS 服务器。
{
"dns": ["202.116.64.1", "202.116.64.2"]
}
重启 Docker 服务以应用更改。
sudo systemctl restart docker
2. 在 Docker Compose 文件中设置
在 docker-compose.yml 文件中,为每个服务定义 dns 属性。
version: '3'
services:
web:
image: nginx
dns:
- 202.116.64.1
- 202.116.64.2
在 Kubernetes 中如何设置域名转发
1. 修改 CoreDNS 配置
访问 Kubernetes 集群的 CoreDNS 配置文件(通常是 `Corefile`),通常位于 `kube-system` 命名空间下的 ConfigMap `coredns` 中。
添加或修改转发规则,以便将特定域名的查询请求转发到外部 DNS 服务器。
nas.storage.local:53 {
forward . 202.116.64.1 202.116.64.2
}
应用更改并重启 CoreDNS Pods。
kubectl -n kube-system edit configmap coredns
2. 使用 Pod 的 DNSPolicy
在 Pod 定义中设置 dnsPolicy 和 dnsConfig 字段,直接为特定的 Pod 指定 DNS 服务器。
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-container
image: my-image
dnsPolicy: "None"
dnsConfig:
nameservers:
- 202.116.64.1
- 202.116.64.2
searches:
- ns1.svc.cluster-domain.example
- my.domain.com
options:
- name: ndots
value: "2"
如修改了 CoreDNS 配置,不需要重启整个集群。只需更新 CoreDNS 的 ConfigMap 并重启 CoreDNS Pods 即可。CoreDNS 会自动检测配置变化并重新加载。
可使用 nslookup 或 dig 工具从 Pod 内部执行 DNS 查询,以验证配置是否按预期工作。
kubectl run -i --tty --image busybox:test --restart=Never dns-test --rm /bin/sh
在 Pod 内部执行
nslookup nas.storage.local
如应用需要访问多个外部服务,每个服务都有不同的 DNS 服务器,可为每个需要特殊 DNS 配置的服务单独设置 Pod 的 dnsConfig。这样,每个服务都可以指向正确的 DNS 服务器。
修改 DNS 配置对集群中的 Pod 影响问题,如果修改的是 CoreDNS 的全局配置,那么这些更改将影响所有使用集群内 DNS 服务的 Pod。如果只修改特定 Pod 的dnsConfig,则仅影响该 Pod。