为 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
...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
这是问题所在: 我们在不同的网络上有几个 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 的建议:
我无法使用 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
...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