在Kubernetes中使用CoreDNS作为集群的DNS解析器是非常常见的,但有时候需要将CoreDNS部署在集群之外,也就是所谓的"外部"部署。本文将向刚入门的小白介绍如何实现"K8S CoreDNS外部"。

### 流程概述

下面是实现"K8S CoreDNS外部"的步骤概览:

| 步骤 | 操作 |
| ---- | --------------------------------------- |
| 1 | 创建ConfigMap来配置CoreDNS |
| 2 | 部署外部CoreDNS |
| 3 | 配置Kubernetes使用外部CoreDNS |

### 具体步骤

#### 步骤一:创建ConfigMap来配置CoreDNS

Kubernetes中的CoreDNS配置通常存储在ConfigMap中,我们需要创建一个用于配置外部CoreDNS的ConfigMap。

```bash
$ kubectl create configmap coredns --from-file=coredns.yaml
```

上面的命令创建了一个名为`coredns`的ConfigMap,并从`coredns.yaml`文件中加载配置。

#### 步骤二:部署外部CoreDNS

接下来,我们需要部署外部CoreDNS。这可以通过在CoreDNS的配置文件中指定CoreDNS服务器的外部IP地址来完成。

```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
k8s-app: coredns
name: coredns
spec:
template:
spec:
containers:
- name: coredns
args:
- -conf
- /etc/coredns/coredns.yaml
volumeMounts:
- name: coredns-config
mountPath: /etc/coredns
volumes:
- name: coredns-config
configMap:
name: coredns
```

上面是一个简化版的部署CoreDNS的Deployment文件,需要根据实际情况进行适当的修改。

#### 步骤三:配置Kubernetes使用外部CoreDNS

最后一步是配置Kubernetes集群以使用我们部署的外部CoreDNS。这可以通过修改kubelet的启动参数来完成。

编辑kubelet的启动配置文件(通常是`/etc/systemd/system/kubelet.service.d/10-kubeadm.conf`),在`KUBELET_ARGS`中添加以下参数:

```bash
--cluster-domain=cluster.local
--cluster-dns=10.96.0.10
```

这里的`10.96.0.10`是外部CoreDNS服务器的IP地址,`cluster.local`是集群的域名后缀,需要根据实际情况进行修改。

#### 总结

通过以上步骤,我们就成功实现了"K8S CoreDNS外部"的部署和配置。希未这篇文章对你有所帮助,如有疑问欢迎留言讨论。