Change:
<!-- Please use this template while reporting a bug and provide as much info as possible. Not doing so may result in your bug not being addressed in a timely manner. Thanks! If the matter is security related, please disclose it privately via --This is probably just a documentation / example issue. I'm a real noob so I can just tell this is an issue, but I can't fix the docs through a PR, otherwise I'd do it happily. Hope it's not a dupe. Following the guide at with IPVS. Using the following script: This generates the following YAML (only the interesting part): You see that the line has an extra comma. It's instead of (extra comma after second argument) This generates the following log: Removing the extra comma fixes everything. Setup a cluster with Kube-DNS IPVS mode Generate the nodelocaldns Deploy the manifest Pods are crashing Kubernetes version v1.21.0 Cloud provider or hardware configuration: Bare Metal with HA setup (behind an external LB, Kube-proxy as IPVS) OS (e.g: ): CentOS Linux 8 Kernel (e.g. ): Linux 4.18.0-240.10.1.el83.x8664 SMP Mon Jan 18 17:05:51 UTC 2021 x8664 x8664 x86_64 GNU/LinuxInstall tools: none, a classic kubeadm initNetwork plugin and version (if this is a network-related bug): Not relevant, but Canal (Calico + Flannel) Others: nothing. Love you all for making K8S. Thank you a billion times.
This issue is currently awaiting triage. If a SIG or subproject determines this is a relevant issue, they will accept it by applying the label and provide further guidance. The label can be by org members by writing in a comment. <detailsInstructions for interacting with me using PR comments are available . If you have questions or suggestions related to my behavior, please file an issue against the repository. </details
/sig docs
, it seems like that don't get a value return. i saw command in Can you try this again and check if can kubedns get a value?
/area dns /sig network /assign Documentation here is not changed since Sep 2019 and needs to be updated as well. Dual-stack and ipv6 are used more widely now.
I do get a value, but is replaced with as the extra comma doesn't seem to be replaced.
/assign

Discussion:
# Nodelocal DNS Cache <ins> Using NodeLocal DNSCache in Kubernetes clusters(https://kubernetes.io/docs/tasks/administer-cluster/nodelocaldns/). </ins> This addon runs a node-local-dns pod on all cluster nodes. The pod runs CoreDNS as the dns cache. It runs with `hostNetwork:True` and creates a dedicated dummy interface with a link local ip(169.254.20.10/32 by default) to listen for DNS queries. The cache instances connect to clusterDNS in case of cache misses. <del> Design details [here](https://git.k8s.io/enhancements/keps/sig-network/0030-nodelocal-dns-cache.md) KEP to graduate to beta [here](https://git.k8s.io/enhancements/keps/sig-network/20190424-NodeLocalDNS-beta-proposal.md) </del> <ins> Design details [here](https://github.com/kubernetes/enhancements/blob/master/keps/sig-network/1024-nodelocal-cache-dns/README.md) </ins> <del> This feature is graduating to Beta in release 1.15. </del> <ins> This feature is graduating to GA in release 1.18(Beta in release 1.15). </ins> ## nodelocaldns addon template This directory contains the addon config yaml - `nodelocaldns.yaml` The variables will be substituted by the configure scripts when the yaml is copied into master. <del> We have the following variables in the yaml: `__PILLAR__DNS__SERVER__` - set to kube-dns service IP. `__PILLAR__LOCAL__DNS__`  - set to the link-local IP(169.254.20.10 by default). `__PILLAR__DNS__DOMAIN__` - set to the cluster domain(cluster.local by default). </del> <ins> We have the following variables in the yaml: `__PILLAR__DNS__SERVER__` - set to kube-dns service IP. `__PILLAR__LOCAL__DNS__`  - set to the link-local IP(169.254.20.10 by default). `__PILLAR__DNS__DOMAIN__` - set to the cluster domain(cluster.local by default). Note: The local listen IP address for NodeLocal DNSCache can be any address that can be guaranteed to not collide with any existing IP in your cluster. It's recommended to use an address with a local scope, per example, from the link-local range 169.254.0.0/16 for IPv4 or from the Unique Local Address range in IPv6 fd00::/8. </ins> The following variables will be set by the node-cache images - k8s.gcr.io/k8s-dns-node-cache:1.15.6 or later. The values will be determined by reading the kube-dns configMap for custom <del> Upstream server configuration. `__PILLAR__CLUSTER__DNS__` - Upstream server for in-cluster queries. `__PILLAR__UPSTREAM__SERVERS__` - Upstream servers for external queries. </del> <ins> Upstream server configuration. `__PILLAR__CLUSTER__DNS__` - Upstream server for in-cluster queries. `__PILLAR__UPSTREAM__SERVERS__` - Upstream servers for external queries. </ins> ### Network policy and DNS connectivity When running nodelocaldns addon on clusters using network policy, additional rules might be required to enable dns connectivity. <del> Using a namespace selector for dns egress traffic as shown [here](https://docs.projectcalico.org/v2.6/getting-started/kubernetes/tutorials/advanced-policy) </del> <ins> Using a namespace selector for dns egress traffic as shown [here](https://docs.projectcalico.org/security/tutorials/kubernetes-policy-advanced) </ins> might not be enough since the node-local-dns pods run with `hostNetwork: True` One way to enable connectivity from node-local-dns pods to clusterDNS ip is to use an ipBlock rule instead:

### Negative caching <del> The `denial` cache TTL has been reduced to the minimum of 5 seconds [here](https://github.com/kubernetes/kubernetes/blob/master/cluster/addons/dns/nodelocaldns/nodelocaldns.yaml#L37). In the unlikely event that this impacts performance, setting this TTL to a higher value make help alleviate issues, but be aware that operations that rely on DNS polling for orchestration may fail (for example operators with StatefulSets). </del> <ins> The `denial` cache TTL has been reduced to the minimum of 5 seconds [here](https://github.com/kubernetes/kubernetes/blob/a38ed2c5ceedf682cbc19442aac5224ae6e10eaa/cluster/addons/dns/nodelocaldns/nodelocaldns.yaml#L61). In the unlikely event that this impacts performance, setting this TTL to a higher value make help alleviate issues, but be aware that operations that rely on DNS polling for orchestration may fail (for example operators with StatefulSets). </ins>