
我们上一章介绍了Docker基本情况,目前在规模较大的容器集群基本都是Kubernetes,但是Kubernetes涉及的东西和概念确实是太多了,而且随着版本迭代功能在还增加,笔者有些功能也确实没用过,所以只能按照我自己的理解来讲解。
我们在上一小节介绍了coredns的的基本功能和pod的解析域名的流程,那么这一小节我们将介绍一些更细节的东西。
在 Kubernetes 集群中,默认的域名后缀是 .cluster.local。这是由 Kubernetes 集群的 DNS 配置决定的。
这个配置在部署的时候自动生成的,如果不通过配置文件修改这个默认配置,则是系统自动生成,默认就是.cluster.local。
在 Kubernetes 中,每个命名空间都有一个默认的域名后缀,该后缀是命名空间名称加上 .svc.cluster.local。例如,如果命名空间的名称是 "default",那么默认的域名后缀将是 .default.svc.cluster.local。
通过这个默认域名后缀,可以在集群内部访问 Kubernetes Service,而不需要额外指定完整的域名。
例如,如果有一个名为 "ingress-nginx-controller" 的 Service,在ingress-nginx的命名空间中,可以通过
ingress-nginx-controller.ingress-nginx.svc.cluster.local 这样的域名来访问该 Service。

如果想要修改这个域名,需要在创建集群的时候进行定义,后面修改会比较麻烦,尤其是已经大面积使用的情况下,目前已知这些地方是有coredns的cm,kube-apiserver.yaml和kubelet的配置文件config.yaml都涉及到这个配置。
如果要在修改,需要提前准备配置文件,参考Kubernetes(k8s)-安装k8s(docker版)的创建集群的命令,准备下面的配置文件。
#当然这个配置的文件内容其实可以有很多
apiVersion: kubeadm.k8s.io/v1beta3
kind: ClusterConfiguration
kubernetesVersion: v1.23.12
controlPlaneEndpoint: "192.168.31.211:6443" # 如果你有一个负载均衡器或者需要一个稳定的API服务器访问地址,请指定它。
networking:
podSubnet: "10.244.0.0/16"
serviceSubnet: "10.96.0.0/12" # 如果你需要指定服务子网
dnsDomain: "mycustomdomain.local" # 自定义域名后缀
apiServer:
extraArgs:
advertise-address: "192.168.31.211"
certSANs:
- "192.168.31.211" # 如果你有其他SAN条目,可以继续添加
controllerManager: {}
scheduler: {}
imageRepository: registry.aliyuncs.com/google_containers # 镜像仓库#创建集群
kubeadm init \
--config kubeadm-config.yaml 虽然上面的名字具有通用性,但是还是太长了,能否有比较简单的方法,比如只用服务名字就可以了呢?当然是可以的,同一个命名空间中访问其他 Service 时,可以直接使用 Service 的名称进行域名解析。不需要指定命名空间,当然也不需要添加默认域名。因为同一命名空间中的资源默认都是可见的,但是如果是跨命名空间则不能简写。
例如,如果在命名空间 namespace1 中的 Pod 需要访问命名空间 namespace2 中的 Service,需要使用 <service-name>.<namespace2>.svc.cluster.local 的域名即可。

这样,Pod 就可以通过 Service 的域名来解析和访问其他命名空间中的 Service。Kubernetes 会自动将域名解析到正确的 IP 地址和端口,以实现跨命名空间的通信。
历史推荐内容Docker-docker基本信息,基本命令,dockerfile,原理,仓库,存储网络日志,番外篇云计算&虚拟化-包括服务器购买,虚拟化介绍,虚拟磁盘,虚拟网络,创建虚拟机,安装虚拟机,dashboard,xml解释,克隆,快照,初始化,esxi介绍。Linux进阶-包括硬件,日常运维,基础软件,日志,进阶命令,防火墙,shell编程,内核,linux系统及初始化Linux基础-包括文件的增删改查,磁盘管理,网络配置,用户配置,权限配置 |
|---|