图中kube-dns只是一个service,但是他对外提供k8s集群内部的dns服务,真正的dns server,是 coredns这几个pod
k8s namespace 的作用只是提供逻辑上的组件隔离例如pod service ,deployment等,实际上不同namespace 之间都是通过service的full dns 域名进行访问,当然也可以通过clusterIP进行访问,但是service的IP有可能会发生变化例如重新部署就会生成新的IP但是域名是不变的,这也是为什么会出现 kube-dns服务的原因
service 三种类型:
- ClusterIP #默认类型 ,集群内部使用,一组pod想访问另外一组pod 就可以使用该类型, 这个ip是k8s帮忙生成的,在别的work node,或者pod中可以访问到这个IP或IP所对应的域名,一般域名规则为如下图:
下图展示了kubernetes service 的ClusterIP,图二我们用域名的方式访问了这个service,域名格式为:<service name>.<namespace>.svc.cluster.local,
-
不同namespace下的pod 也可以通过域名的方式进行访问,namespace 只是逻辑上将pod service等进行隔离开来方便管理,但是实际上还是能相互访问例如下面的图中nginx-web pod 能通过域名的方式访问到kube-system namesapce下的service
- NodePort #对外访问暴露端口使用,
- LoadBlance #也是对外访问使用,但是属于公有云用途