从 ConfigMap 填充 AWS Alb Ingress 注释

Populating AWS Alb Ingress Annotations from ConfigMap

我正在创建 'alb.ingress' 资源作为我的 Helm 图表的一部分。

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

'alb.ingress' 资源注释部分所需的值可在我的 ConfigMap 中找到。

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

有没有办法使用配置映射来填充注释?

我解决这个挑战的方法是使用 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: 
       ....

我使用 pod(作业也是一个选项)使用 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

请注意,pod 应该具有正确的服务帐户,并附加了正确的权限角色。例如,在这种情况下,要使 pod 能够注释 ALB,它必须在权限列表中具有 extensions apiGroup 和入口资源(我还没有限制措辞)。

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

希望这对以后的人有所帮助。