Заполнение входных аннотаций AWS Alb из ConfigMap

#amazon-eks

#amazon-eks

Вопрос:

Я создаю ресурс alb.ingress как часть моей диаграммы управления.

 apiVersion: extenstions/v1beta1
kind: Ingress
metadate:
  annotation:
    alb.ingress.kubernetes.io/certification-arn: $cert_arn
    alb.ingress.kubernetes.io/security-group: $sg
    ...
 

Значения, требуемые в разделах аннотаций ресурсов alb.ingress, доступны в my ConfigMap .

  env:
   - name: cert_arn
     valueFrom: 
       configMapKeyRef: 
         name: environmental-variables
         key: certification_arn
   - name: sg
     valueFrom: 
       configMapKeyRef: 
         name: environmental-variables
         key: security-groups
    ...
 

Есть ли способ заполнить аннотации с помощью config-map?

Ответ №1:

Способ, которым я решил эту проблему, заключался в создании входного ресурса с использованием Helm и переменных, которые у меня были до создания ресурса, таких как имя приложения, пространства имен и т. Д.

 apiVersion: extenstions/v1beta1
kind: Ingress
metadata:
name: "{{ .Values.application.name }}-ingress"
namespace: "{{ .Values.env.name }}"
labels:
  app: "{{ .Values.application.name  }}"
specs:
  rules:
    - host: "{{ .Values.environment.name }}.{{ .Values.application.name }}.{{ .Values.domain.name }}"
      https: 
       ....
 

Я использовал модуль (задание также является опцией) для аннотирования вновь созданного входного ресурса с использованием значений среды из configmap.

 apiVersion: extenstions/v1beta1
kind: Ingress
metadate:
  name: annotate-ingress-alb
spec:
  serviceAccountName: internal-kubectl
containers:
   - name: modify-alb-ingress-controller
     image: "{{ .Values.images.varion }}"
  command: ["sh", "-c"]
  args:
    - '...
       kubectl annotate ingress -n {{ .Values.env.name }} {{ .Values.application.name }}-ingress alb.ingress.kubernetes.io/certificate-arn=$CERT_ARN;
 env:
  - name: cert_arn
    valueFrom: 
    configMapKeyRef: 
     name: environmental-variables
     key: certification_arn
 

Обратите внимание, что модуль должен иметь правильную учетную запись службы с правильными правами доступа, к которой прикреплены роли. Например, в этом случае, чтобы модуль мог аннотировать ALB, у него должны были быть extensions apiGroup и входные ресурсы в списке разрешений (я еще не ограничил формулировку).

 apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: service-account-role
rules:
  - apiGroups:
  - ""
  - extensions
resources:
  - ingresses
verbs: ["*"]
 

Надеюсь, это поможет кому-то в будущем.