8.5. 使用 DNS 转发
您可以使用以下方法使用 DNS 转发来覆盖 /etc/resolv.conf
文件中的默认转发配置:
- 为每个区指定名称服务器。如果转发区是 OpenShift Container Platform 管理的 Ingress 域,那么上游名称服务器必须为域授权。
- 提供上游 DNS 服务器列表。
- 更改默认转发策略。
注意
默认域的 DNS 转发配置可以同时在 /etc/resolv.conf
文件和上游 DNS 服务器中指定默认服务器。
流程
修改名为
default
的 DNS Operator 对象:$ oc edit dns.operator/default
发出上一命令后,Operator 会根据
Server
创建并更新名为dns-default
的配置映射,并带有额外的服务器配置块。如果任何服务器都没有与查询匹配的区域,则名称解析会返回上游 DNS 服务器。配置 DNS 转发
apiVersion: operator.openshift.io/v1 kind: DNS metadata: name: default spec: servers: - name: example-server 1 zones: 2 - example.com forwardPlugin: policy: Random 3 upstreams: 4 - 1.1.1.1 - 2.2.2.2:5353 upstreamResolvers: 5 policy: Random 6 upstreams: 7 - type: SystemResolvConf 8 - type: Network address: 1.2.3.4 9 port: 53 10
- 1
- 必须符合
rfc6335
服务名称语法。 - 2
- 必须符合
rfc1123
服务名称语法中的子域的定义。集群域cluster.local
是对zones
字段的无效子域。 - 3
- 定义用于选择上游解析器的策略。默认值为
Random
。您还可以使用RoundRobin
, 和Sequential
值。 - 4
- 每个
forwardPlugin
最多允许 15 个upstreams
。 - 5
- 可选。您可以使用它来覆盖默认策略,并将 DNS 解析转发到默认域的指定 DNS 解析器(上游解析器)。如果没有提供任何上游解析器,DNS 名称查询将进入
/etc/resolv.conf
中的服务器。 - 6
- 决定选择上游服务器进行查询的顺序。您可以指定这些值之一:
Random
、RoundRobin
或Sequential
。默认值为Sequential
。 - 7
- 可选。您可以使用它提供上游解析器。
- 8
- 您可以指定
上游
的两种类型 -SystemResolvConf
和Network
。SystemResolvConf
将上游配置为使用/etc/resolv.conf
和Network
定义一个Networkresolver
。您可以指定其中一个或两者都指定。 - 9
- 如果指定类型是
Network
,则必须提供 IP 地址。address
字段必须是有效的 IPv4 或 IPv6 地址。 - 10
- 如果指定类型是
Network
,您可以选择性地提供端口。port
字段必须是1
到65535
之间的值。如果您没有为上游指定端口,则会尝试默认端口 853。
可选:在高度监管的环境中工作时,您可能需要在将请求转发到上游解析器时保护 DNS 流量,以便您可以确保额外的 DNS 流量和数据隐私。集群管理员可以配置传输层安全(TLS)来转发 DNS 查询。
使用 TLS 配置 DNS 转发
apiVersion: operator.openshift.io/v1 kind: DNS metadata: name: default spec: servers: - name: example-server 1 zones: 2 - example.com forwardPlugin: transportConfig: transport: TLS 3 tls: caBundle: name: mycacert serverName: dnstls.example.com 4 policy: Random 5 upstreams: 6 - 1.1.1.1 - 2.2.2.2:5353 upstreamResolvers: 7 transportConfig: transport: TLS tls: caBundle: name: mycacert serverName: dnstls.example.com upstreams: - type: Network 8 address: 1.2.3.4 9 port: 53 10
- 1
- 必须符合
rfc6335
服务名称语法。 - 2
- 必须符合
rfc1123
服务名称语法中的子域的定义。集群域cluster.local
是对zones
字段的无效子域。集群域cluster.local
不是zones
中的一个有效的subdomain
。 - 3
- 在为转发 DNS 查询配置 TLS 时,将
transport
字段设置为具有值TLS
。默认情况下,CoreDNS 缓存在 10 秒内转发连接。如果没有请求,CoreDNS 将为该 10 秒打开 TCP 连接。对于大型集群,请确保您的 DNS 服务器知道可能有多个新的连接来保存打开,因为您可以在每个节点上启动连接。相应地设置 DNS 层次结构以避免性能问题。 - 4
- 当为转发 DNS 查询配置 TLS 时,这是用作服务器名称的一部分(SNI)的强制服务器名称来验证上游 TLS 服务器证书。
- 5
- 定义用于选择上游解析器的策略。默认值为
Random
。您还可以使用RoundRobin
, 和Sequential
值。 - 6
- 必需。您可以使用它提供上游解析器。每个
forwardPlugin
条目最多允许 15 个upstreams
条目。 - 7
- 可选。您可以使用它来覆盖默认策略,并将 DNS 解析转发到默认域的指定 DNS 解析器(上游解析器)。如果没有提供任何上游解析器,DNS 名称查询将进入
/etc/resolv.conf
中的服务器。 - 8
网络
类型表示,该上游解析器应该独立于/etc/resolv.conf
中列出的上游解析器单独处理转发请求。在使用 TLS 时,只允许网络
类型,且您必须提供 IP 地址。- 9
address
字段必须是有效的 IPv4 或 IPv6 地址。- 10
- 您可以选择提供端口。
port
必须是1
到65535
之间的值。如果您没有为上游指定端口,则会尝试默认端口 853。
注意如果
servers
未定义或无效,则配置映射只包括默认服务器。
验证
查看配置映射:
$ oc get configmap/dns-default -n openshift-dns -o yaml
基于以上 DNS 示例的 DNS ConfigMap 示例
apiVersion: v1 data: Corefile: | example.com:5353 { forward . 1.1.1.1 2.2.2.2:5353 } bar.com:5353 example.com:5353 { forward . 3.3.3.3 4.4.4.4:5454 1 } .:5353 { errors health kubernetes cluster.local in-addr.arpa ip6.arpa { pods insecure upstream fallthrough in-addr.arpa ip6.arpa } prometheus :9153 forward . /etc/resolv.conf 1.2.3.4:53 { policy Random } cache 30 reload } kind: ConfigMap metadata: labels: dns.operator.openshift.io/owning-dns: default name: dns-default namespace: openshift-dns
- 1
- 对
forwardPlugin
的更改会触发 CoreDNS 守护进程集的滚动更新。
其他资源
- 有关 DNS 转发的详情,请查看 CoreDNS 转发文档。