为 Kubernetes 上的 CoreDNS 服务添加一个简单的 A 记录

Add a simple A record to the CoreDNS service on Kubernetes

这是问题所在: 我们在不同的网络上有几个 microk8s 集群 运行;但是每个人都可以访问我们的 NAS 所在的存储网络。

在 Kubernetes 中,我们使用 nfs-provisionner (nfs-externalsubdir) 创建磁盘。某些磁盘是使用指定的 NAS 服务器的 IP 创建的。 一改IP就发现磁盘绑定了IP,改IP就是在里面新建一个存储资源。

为避免这种情况,我们希望能够在 Kubernetes 集群级别设置 DNS 记录,以便我们可以基于名称而非 IP 使用 nfs provisionner 创建存储资源,并且我们可以更改 DNS需要时记录(例如,当我们升级或迁移我们的外部 NAS 设备时) 例如,我想告诉每个 microk8s 环境:

192.168.1.4 我的-nas.mydomain.local

...就像我在 /etc/hosts 文件中所做的那样。

有没有合适的方法来实现这个? 我试着听从关于这个 link 的建议: (答案被投票 15 次,集群部分),重新启动部署,但它没有工作

我无法使用 hostAliases 功能,因为我们使用的每个图表都没有提供它,这就是为什么我正在寻找更全局的解决方案。

此致,

您可以使用 Kube-DNS (Core-DNS) 在 K8s 中设置自定义 DNS

您必须 inject/pass 配置文件作为 configmap 到核心 DNS 卷。

Configmap 看起来像

apiVersion: v1
kind: ConfigMap
metadata:
  name: coredns
  namespace: kube-system
data:
  Corefile: |
    .:53 {
        errors
        health {
            lameduck 5s
        }
        ready
        kubernetes cluster.local in-addr.arpa ip6.arpa {
            pods insecure
            fallthrough in-addr.arpa ip6.arpa
            ttl 30
        }
        prometheus :9153
        forward . /etc/resolv.conf
        cache 30
        loop
        reload
        loadbalance
    }  

您阅读更多关于: https://kubernetes.io/docs/tasks/administer-cluster/dns-custom-nameservers/

https://platform9.com/kb/kubernetes/how-to-customize-coredns-configuration-for-adding-additional-ext

否则你也可以使用外部DNS核心DNS

你可以对服务(资源)进行注解,外部DNS会将地址添加到core-dns

阅读更多相关信息:

https://github.com/kubernetes-sigs/external-dns/blob/master/docs/tutorials/coredns.md

https://docs.mirantis.com/mcp/q4-18/mcp-deployment-guide/deploy-mcp-cluster-using-drivetrain/deploy-k8s/external-dns/verify-external-dns/coredns-etxdns-verify.html

...we could create storage resources with the nfs provisionner based on a name an not an IP, and we could alter the DNS record when needed...

为此,您可以在不接触 coreDNS 的情况下尝试无头服务:

apiVersion: v1
kind: Service
metadata:
  name: my-nas
  namespace: kube-system  # <-- you can place it somewhere else
  labels:
    app: my-nas
spec:
 ports:
 - protocol: TCP
   port: <nas port>
---
apiVersion: v1
kind: Endpoints
metadata:
  name: my-nas
subsets: 
- addresses:
  - ip: 192.168.1.4
  ports:
  - port: <nas port>

用作:my-nas.kube-system.svc.cluster.local