k8s中不同名称空间下的pod无法解析服务名

  • Post author:
  • Post category:其他




1、背景

公司的项目需要使用容器化部署,为了更好的维护和管理,我将各个项目按照命名空间进行隔离开,但是却发现存在一些问题

不同的系统间需要项目调用,而且是按照服务名进行调用,但是却导致不同名称空间下pod无法解析其他的命令空间下的服务名,需要使用

服务名.命名空间

才可以解析,如下(存在两个名称空间yshj-ump、和gxjhpt,其中gxjhpt下的pod需要调用yshj-ump下的api服务)

在这里插入图片描述

可以看ump-api无法解析,进入gxjhpt下的pod测试域名解析发现确实无法解析,但是可以使用

服务名.命名空间

便可以解析

在这里插入图片描述

手动在pod中的

/etc/hosts

中添加

ump-api

的域名解析可以解决,但是这个太现实。



2、解决办法



1. 修改k8s的dns为kubedns

  • k8s中负责解析服务名的dns组件有coredns、kubedns等多种,查看命令

    kubectl get pod -n kube-system

    ,因此集群上服务互相访问,服务名解析问题首先看服务名是否在同一个命名空间namesapce,服务名是否写正确,其次检查dns组件的版本和工作状态。
  • coredns、kubedns二者有个区别,是在解析ExternalName svc时,即访问外部服务有两种组合:kubedns+externalname与coredns+endpoints,这取决于k8s集群上安装了哪种dns组件。



1)coredns解析不了externalname,而定义好的externalname svc 如何才能在安装coredns的k8s集群上运行?这就需要转换一下



2)如果想改变k8s运行的解析服务名的组件,将kube-system命名空间中的coredns删除

kubectl delete deploy -n kube-system coredns

对应的deploy名称,换成kubedns

这种方式担心存在风险不敢操作,故此作罢



2. 修改coredns的configmap,使自动添加域名解析到pod的

/etc/hosts


	hosts {
		10.233.49.227 ump-api
		fallthrough
	}

在这里插入图片描述

不知道为什么这里添加了还是没有生效,依然无法解析,不知道是不是添加的参数有问题还是什么原因



3. 使用hostAliases配置Pod

/etc/hosts

,实现添加域名解析

在这里插入图片描述

  • 和containers属于同一级
      hostAliases:
        - ip: 10.233.49.227
          hostnames:
            - ump-api
            - yshj-ump-api

最终解决,大工搞成,只不过需要每个deploy服务都需要添加有点麻烦

要是可以使用coredns的configmap批量自动生成就好了!!!



版权声明:本文为Entity_G原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。