title: 网络 description: 本页解释了 CoreDNS 和 Nginx-Ingress controller 如何在 RKE2 中工作。 keywords:

  • rancher
  • rancher中文
  • rancher中文文档
  • rancher官网
  • rancher文档
  • Rancher
  • rancher 中文
  • rancher 中文文档
  • rancher cn
  • RKE2
  • 网络

本页解释了 CoreDNS 和 Nginx-Ingress controller 如何在 RKE2 中工作。

请参考安装网络选项页面,了解 Canal 配置选项的详细信息,或者如何设置你自己的 CNI。

关于 RKE2 需要打开哪些端口的信息,请参考安装要求

CoreDNS

CoreDNS 是在启动 server 时默认部署的。要禁用,请在运行每台 server 时在配置文件中加入disable: rke2-coredns选项。

如果你不安装 CoreDNS,你将需要自己安装一个集群 DNS 提供商。

CoreDNS 默认与 autoscaler 一起部署。要禁用它或改变其配置,请使用 HelmChartConfig 资源。

NodeLocal DNSCache

NodeLocal DNSCache通过在每个节点上运行一个 dns 缓存代理来提高性能。要激活这个功能,应用以下 HelmChartConfig。

  1. ---
  2. apiVersion: helm.cattle.io/v1
  3. kind: HelmChartConfig
  4. metadata:
  5. name: rke2-coredns
  6. namespace: kube-system
  7. spec:
  8. valuesContent: |-
  9. nodelocal:
  10. enabled: true

helm 控制器会用新的配置重新部署 coredns。请注意,nodelocal 会修改节点的 iptables 以拦截 DNS 流量。因此,在没有重新部署的情况下,激活然后停用这个功能,会导致 DNS 服务停止工作。

注意,如果 kube-proxy 使用 ipvs 模式,NodeLocal DNSCache 必须被部署在该模式下。要在这种模式下部署它,请应用以下 HelmChartConfig。

  1. ---
  2. apiVersion: helm.cattle.io/v1
  3. kind: HelmChartConfig
  4. metadata:
  5. name: rke2-coredns
  6. namespace: kube-system
  7. spec:
  8. valuesContent: |-
  9. nodelocal:
  10. enabled: true
  11. ipvs: true

Nginx Ingress Controller

nginx-ingress是一个由 NGINX 提供的 Ingress controller,使用 ConfigMap 来存储 NGINX 的配置。

在启动 server 时,nginx-ingress 被默认部署。端口 80 和 443 将在其默认配置中由 Ingress controller 绑定,使得这些端口无法用于集群中的 HostPort 或 NodePort 服务。

配置选项可以通过创建HelmChartConfig manifest来自定义rke2-ingress-nginx HelmChart 值。例如,在/var/lib/rancher/rke2/server/manifests/rke2-ingress-nginx-config.yaml中的 HelmChartConfig 有如下内容,在存储 NGINX 配置的 ConfigMap 中,将use-forwarded-headers设为true

  1. # /var/lib/rancher/rke2/server/manifests/rke2-ingress-nginx-config.yaml
  2. ---
  3. apiVersion: helm.cattle.io/v1
  4. kind: HelmChartConfig
  5. metadata:
  6. name: rke2-ingress-nginx
  7. namespace: kube-system
  8. spec:
  9. valuesContent: |-
  10. controller:
  11. config:
  12. use-forwarded-headers: "true"

更多信息请参考官方的nginx-ingress Helm 配置参数

要禁用 NGINX ingress controller,在配置文件中加入 disable: rke2-ingress-nginx 选项,启动每台 server。

没有主机名的节点

一些云计算供应商,如 Linode,会以 localhost 作为主机名来创建机器,其他的可能根本就没有设置主机名。这可能会导致域名解析方面的问题。你可以在运行 RKE2 时加入 node-name 参数,这将传递节点名称来解决这个问题。