Невозможно прочитать конфигурационную карту с именем: [xx] в пространстве имен ['default'] Игнорирование

Новое в k8s.

Попытка прочитать значения из карты конфигурации на основе профиля. Моя конфигурационная карта существует в пространстве имен по умолчанию. Но пружинный ботинок не набирает значения.

Карта конфигурации выглядит так:

apiVersion: v1
kind: ConfigMap
metadata:
    name: example-configmap-overriding-new-01
data:
    application.properties: |-
        globalkey = global key value
    application-qa.properties: |-
        globalkey = global key qa value    
    application-prod.properties: |-
        globalkey = global key prod value

Карта конфигурации также создается в пространстве имен по умолчанию.

kubectl get configmap -n default 

NAME                                  DATA   AGE
example-configmap-overriding-new-01   3      8d

Мой файл развертывания выглядит так

apiVersion: apps/v1
kind: Deployment
metadata: 
    name: demo-configmapk8testing
spec:  
    selector:
        matchLabels:
            app: demo-configmapk8testing
replicas: 1
template: 
    metadata:
        labels:
            app: demo-configmapk8testing        
    spec:
        containers:
          - name: demo-configmapk8testing
            image: Path to image
            ports:
            - containerPort: 8080
            args: [
            "--spring.profiles.active=prod",
            "--spring.application.name=example-configmap-overriding-new-01",
            "--spring.cloud.kubernetes.config.name=example-configmap-
            overriding-new-01",
            "--spring.cloud.kubernetes.config.namespace=default",
            "--spring.cloud.kubernetes.config.enabled=true"]
            envFrom:
            - configMapRef:
                name: example-configmap-overriding-new-01

Но журнал весенней загрузки говорит: -

2019-07-02 22:10:38.092  WARN 1 --- [           main] 
o.s.c.k.config.ConfigMapPropertySource   : Can't read configMap with name: 
[example-configmap-overriding-new-01] in namespace:[default]. Ignoring

2019-07-02 22:10:38.331  INFO 1 --- [           main] 
b.c.PropertySourceBootstrapConfiguration : Located property source: 
CompositePropertySource {name='composite-configmap', propertySources= 
[ConfigMapPropertySource {name='configmap.example-configmap-overriding-new- 
01.default'}]}

2019-07-02 22:10:38.420  INFO 1 --- [           main] 
b.c.PropertySourceBootstrapConfiguration : Located property source: 
SecretsPropertySource {name='secrets.example-configmap-overriding-new- 
01.default'}

2019-07-02 22:10:38.692  INFO 1 --- [           main] 
c.e.c.ConfigconsumerApplication          : **The following profiles are 
active: prod**

--some logs--

Injection of autowired dependencies failed; nested exception is 
java.lang.IllegalArgumentException: **Could not resolve placeholder 
'globalkey' in value "${globalkey}"**

Мой файл конфигурации весенней загрузки выглядит так

@Configuration
public class ConfigConsumerConfig {

    @Value(value = "${globalkey}")
    private String globalkey;

    // with getter and setters 
}

У моего pom.xml также есть следующая зависимость.

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-kubernetes-config</artifactId>
        <version>1.0.2.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-configuration-processor</artifactId>
        <optional>true</optional>
    </dependency>

Я запускаю minikube на своем локальном компьютере. Я что-то упустил?

Может ли кто-нибудь поделиться здесь некоторыми комментариями.


person NANDAKUMAR    schedule 03.07.2019    source источник


Ответы (4)


spring-cloud-kubernetes не имеет доступа к Kubernetes API, поэтому он не может читать configMap. Дополнительные сведения см. В этой документации: https://github.com/spring-cloud/spring-cloud-kubernetes/blob/master/docs/src/main/asciidoc/security-service-accounts.adoc.

Короче говоря, примените эту конфигурацию, и она будет работать нормально:

kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  namespace: YOUR-NAME-SPACE
  name: namespace-reader
rules:
  - apiGroups: ["", "extensions", "apps"]
    resources: ["configmaps", "pods", "services", "endpoints", "secrets"]
    verbs: ["get", "list", "watch"]

---

kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: namespace-reader-binding
  namespace: YOUR-NAME-SPACE
subjects:
- kind: ServiceAccount
  name: default
  apiGroup: ""
roleRef:
  kind: Role
  name: namespace-reader
  apiGroup: ""

Подробнее о ролях и привязке ролей можно прочитать здесь: https://kubernetes.io/docs/reference/access-authn-authz/rbac/.

Примечание. Вам не нужно создавать тома и монтировать тома. Я бы сказал, что это альтернатива этому. Если вы хотите, чтобы это было так, вы должны указать spring.cloud.kubernetes.config.paths в конфигурации приложения весенней загрузки (я записал это в файл ресурсов bootstrap.yaml). Например.

spring: 
  cloud:
    kubernetes:
      config:
        paths: /etc/config/application.yaml

А затем через конфигурацию развертывания Kubernetes создайте том ConfigMap и смонтируйте его по этому пути. В нашем примере путь будет / etc / config.

Дайте мне знать, если это сработает для вас :)

person raestio    schedule 19.10.2019
comment
Ты только что спас мне день. Это заставило мою установку работать (без Volume Mount ... Spring Boot, читая ConfigMap напрямую, даже многострочный файл Yaml был встроен в него). Спасибо. - person icordoba; 11.12.2019
comment
является ли / etc / config значением по умолчанию для configmaps? Я создал конфигурационную карту, я могу использовать в весенних облачных кубернетах, используя api. но когда я хочу использовать с монтированием, я не знаю, где находится каталог? - person denizg; 05.05.2020

манифест configmap необходимо исправить. формат неверный

попробуй это

apiVersion: v1
kind: ConfigMap
metadata:
  name: example-configmap-overriding-new-01
data:
  application.properties: |
    globalkey=global-key-value
  application-qa.properties: |
    globalkey=global-key-qa-value
  application-prod.properties: |
    globalkey=global-key-prod-value

вы должны смонтировать configmap как том, чтобы использовать файл конфигурации в вашем приложении

          volumeMounts:
          - name: config
            mountPath: /config
        volumes:
        - name: config
          configMap:        
            name: example-configmap-overriding-new-01
person P Ekambaram    schedule 03.07.2019
comment
Привет @P Ekambaram. Спасибо за ответ. Все еще не повезло. Получение такой же ошибки. Есть еще идеи? Спасибо. - person NANDAKUMAR; 03.07.2019
comment
Поделитесь своим развертыванием yaml - person P Ekambaram; 04.07.2019
comment
Привет @P Ekambaram. Разделяется в самом вопросе. Есть подсказка? - person NANDAKUMAR; 04.07.2019
comment
Привет @P Ekambaram, Да, тоже пробовал vloume mount. Но все же не повезло. - person NANDAKUMAR; 04.07.2019
comment
войдите в модуль и посмотрите, присутствуют ли файлы в папке / config - person P Ekambaram; 04.07.2019
comment
файл будет смонтирован, но изменения в файле не будут загружены, если мы не используем проект spring cloud kubernetes. Правильно - person Hammad Dar; 18.05.2021
comment
вам нужно удалить модуль, чтобы новый модуль был создан с использованием обновленной карты конфигурации - person P Ekambaram; 19.05.2021

Не могли бы вы также смонтировать свою конфигурационную карту, может быть, это поможет

volumeMounts:
- mountPath: /app/config
  name: example-configmap-overriding-new-01

volumes:
- name: example-configmap-overriding-new-01
  configMap:
      name: example-configmap-overriding-new-01

Дайте мне знать, если это сработает. Спасибо

Исправлена ​​синтаксическая ошибка

person Vipul Jain    schedule 03.07.2019
comment
Привет @Vipul: Спасибо за ответ. Пытался, но получил ту же ошибку, что и в вопросе. Любая идея? Спасибо. - person NANDAKUMAR; 04.07.2019

Просто чтобы дать подсказку на случай, если кто-то столкнется с той же основной причиной, что и моя: настройка https_proxy.

В нашем проекте есть http / https_proxy в конфигурации развертывания, и объект Spring Kubernetes Client пытался достичь главного URL-адреса по IP-адресу для получения конфигурационных карт.

Хотя настройки noproxy не распознают подстановочный знак "*" (это должен быть IP-адрес v4), я должен установить spring.cloud.kubernetes.client.masterUrl на kubernetes.default.svc, чтобы его можно было разрешить по имени DNS.

person Dan    schedule 08.06.2020