0

我正在尝试从 rego 中的配置映射中获取值。

对于kube-mgmt,在部署中,我有:

- args:

  - --enable-data=true
  - --policies=opa-mutate
  - --require-policy-label=true
  - --replicate-cluster=v1/configmaps
  - --replicate-cluster=v1/namespaces
  - --replicate=extensions/v1beta1/ingresses
  - --replicate=v1/configmaps
  - --replicate=networking.k8s.io/v1beta1/ingresses

在我的配置图中,我有:

apiVersion: v1
  data:
    annotations.rego: |
      package kubernetes.admission

      import data.kubernetes
      import data.kubernetes.namespaces
      import data.kubernetes.configmaps
 
      # Get configmap properties
      clvars := configmaps["kube-system"].data["helm-variables"]["values.yaml"]
      subnet := clvars.workerSubnets[0]
      patch[p] {
      ops := { "CREATE", "UPDATE" }
      kinds := { "Ingress" }
      ops[input.request.operation]
      kinds[input.request.object.kind]

      albannotations := {
        "subnet": subnet,
        "alb.ingress.kubernetes.io/healthcheck-path": "/healthz",
        "alb.ingress.kubernetes.io/listen-ports": `[{"HTTPS": 443}]`,
        "alb.ingress.kubernetes.io/target-type": "ip"
      }

      alb_annotations :=  merge_objects(annotations,albannotations)

      k := pick_first("annotations", input.request.object.metadata, {"annotations": {}})
      merged_annotations := merge_objects(alb_annotations, k)
      p = {"op": "add", "path": "/metadata/annotations", "value": merged_annotations}
    }

现在这一切都很好,如果我删除"subnet": subnet,, 意味着创建的入口会根据需要进行注释。

我尝试关注以下信息: https ://github.com/open-policy-agent/kube-mgmt

我不知道还有什么可以尝试从 configmap 中获取信息,也不知道除了重新编辑 configmap 之外如何以任何其他方式对其进行测试。

这是我的配置图的样子:

---
apiVersion: v1
kind: ConfigMap
metadata:
  labels:
    openpolicyagent.org/data: opa
  name: helm-variables
  namespace: kube-system
data:
  values.yaml: |
    global:
      availabilityZones:
        - "us-west-2a"
        - "us-west-2b"
      workerSubnets:
        - "subnet_a"
        - "subnet_b"
4

0 回答 0