在Kubernetes(K8S)中,DNS(Domain Name System)是一个非常重要的组件,能够帮助服务实现服务间的通信。在K8S中加入DNS是非常常见的操作,下面我将逐步教你如何实现"K8S加入DNS"。

整个过程主要包括以下几个步骤:
1. 安装kube-dns组件
2. 修改coredns配置
3. 部署coredns

具体每一步需要做的事情以及对应的代码示例如下:

### 步骤一:安装kube-dns组件
通过kubectl apply命令安装kube-dns组件,使K8S集群具备DNS解析的功能。

```bash
kubectl apply -f https://raw.githubusercontent.com/kubernetes/kops/master/addons/k8s-dns/k8s-dns-addon.yaml
```

### 步骤二:修改coredns配置
修改coredns的ConfigMap配置,将coredns与kube-dns进行关联。

```bash
kubectl -n kube-system edit configmap coredns
```

在编辑器中找到以下内容:

```yaml
.:53 {
errors
health
kubernetes cluster.local in-addr.arpa ip6.arpa {
pods insecure
upstream
fallthrough in-addr.arpa ip6.arpa
}
}
```

将其中的`kubernetes cluster.local`修改为`kubernetes kube-dns.kube-system.svc.cluster.local`.

### 步骤三:部署coredns
使用kubectl apply命令部署修改后的coredns配置。

```bash
kubectl apply -f coredns.yaml
```

### coredns.yaml示例
```yaml
apiVersion: v1
kind: Service
metadata:
name: kube-dns
namespace: kube-system
annotations:
prometheus.io/port: "9153"
spec:
selector:
k8s-app: kube-dns
clusterIP: None
ports:
- name: dns
port: 53
protocol: UDP
- name: dns-tcp
port: 53
protocol: TCP

---
apiVersion: apps/v1
kind: Deployment
metadata:
name: coredns
namespace: kube-system
labels:
k8s-app: kube-dns
spec:
replicas: 1
selector:
matchLabels:
k8s-app: kube-dns
template:
metadata:
labels:
k8s-app: kube-dns
spec:
containers:
- name: coredns
image: k8s.gcr.io/coredns:1.6.5
resources:
limits:
memory: 170Mi
requests:
cpu: 100m
memory: 70Mi
volumeMounts:
- name: config-volume
mountPath: /etc/coredns
readOnly: true
volumes:
- name: config-volume
configMap:
name: coredns
items:
- key: Corefile
path: Corefile
serviceAccountName: coredns
tolerations:
- operator: Exists
priorityClassName: system-cluster-critical
```

通过以上三个步骤,你就成功将Kubernetes集群加入DNS,让服务可以互相访问并解析域名了。希望这篇指南对你有所帮助!