Namespace resolution

  • spring.cloud.kubernetes.client.namespace 属性

  • 文件中指定的位置

  • /var/run/secrets/kubernetes.io/serviceaccount/namespace 文件

  • 客户端方法调用(如果客户端提供),例如 Fabric8 的 KubernetesClient::getNamespace

查找应用程序命名空间是在尽力而为的基础上进行的。为了找到命名空间,我们会迭代一些步骤。最简单、最常用的方法是在适当的配置中指定命名空间,例如:

spring:
  application:
    name: app
  cloud:
    kubernetes:
      secrets:
        name: secret
        namespace: default
        sources:
         # Spring Cloud Kubernetes looks up a Secret named 'a' in namespace 'default'
         - name: a
         # Spring Cloud Kubernetes looks up a Secret named 'secret' in namespace 'b'
         - namespace: b
         # Spring Cloud Kubernetes looks up a Secret named 'd' in namespace 'c'
         - namespace: c
           name: d

请记住,ConfigMap 可以执行相同的操作。如果未指定此类命名空间,将按(以下)此顺序读取命名空间:

  1. from property spring.cloud.kubernetes.client.namespace

  2. spring.cloud.kubernetes.client.serviceAccountNamespacePath 属性指定的某个文件中找到的字符串

  3. /var/run/secrets/kubernetes.io/serviceaccount/namespace 文件(kubernetes 默认名称空间路径)中找到的 String

  4. 从指定的客户端方法调用(例如 fabric8 的 KubernetesClient::getNamespace),如果客户端提供了这样一个方法。反过来,这可以通过环境属性进行配置。例如,fabric8 客户端可以通过“KUBERNETES_NAMESPACE”属性进行配置;查阅客户端文档以查看准确的详细信息。

如果从上述步骤中找不到命名空间,将导致引发异常。