初始化容器nslookup问题

时间:2020-02-23 18:50:55

标签: kubernetes kubernetes-helm

我在kubernetes部署文件中有一个Init容器,我看到该初始化容器无法使用Helm验证不同命名空间中存在的服务的可用性。 ns1下面是一个命名空间

      initContainers:
        - name: init-service1 #here I cannot give init-service1.<namespace> as (.) is not allowd
          image: busybox
          command: ['sh', '-c', 'until nslookup service1.<namespace>; do echo waiting for service1.<namespace>; sleep 10; done;']

我在相同的名称空间上尝试了相同的方法,并且在舵机下工作得很好

第二个initcontainer的名称应与我正在查找的服务的名称匹配?

另一个问题是掌舵人,我无法给出名称init-service1。因为(。)不允许。

非常感谢任何帮助

1 个答案:

答案 0 :(得分:0)

由于您正在使用多个名称空间,因此需要使用FQDN来获得服务:

创建Service时,它会创建一个相应的DNS entry。此项的格式为<service-name>.<namespace-name>.svc.cluster.local,这意味着如果容器仅使用<service-name>,它将解析为名称空间本地的服务。这对于在多个名称空间(例如开发,登台和生产)中使用相同的配置很有用。如果要跨命名空间访问,则需要使用完全限定的域名(FQDN)

您的情况:service1.svc.myapp.svc.cluster.local

第二,initontainer的名称应与我正在查找的服务的名称匹配??

不。 initContainer名称在此字段中无关紧要,您可以使用所需的名称。

对于您而言,它应该可以工作:

      initContainers:
        - name: my-init
          image: busybox:1.28
          command: ['sh', '-c', 'until nslookup service1.svc.myapp.svc.cluster.local; do echo waiting for service1.svc.myapp.svc.cluster.local; sleep 10; done;']

参考:

Understanding namespaces and DNS