打开策略代理 - OPA - 如何使用来自 kubernetes configmap 对象的 --config-file
open policy agent - OPA - How to use --config-file from kubernetes configmap object
我正在尝试如下设置我的 OPA。
- OPA 作为 sidecar 安装在 Kubernetes 中
- 政策将作为捆绑包进行管理
- OPA 政策将通过单独的服务 [Bundle] 存储和提供
- 需要使用配置文件配置 OPA 以从外部服务获取策略
- 配置文件将作为配置映射存储在 kubernetes 中。
- 需要在 --config-file 中使用配置映射
我在 kubernetes 中的配置映射
kubectl create configmap policyconfig --from-file=./config/config.yaml
我的 Sidecar OPA
- name: opa
image: openpolicyagent/opa:latest
args:
- "run"
- "--server"
- "--addr=0.0.0.0:443"
- "--addr=0.0.0.0:8181"
- "--config-file=policyconfig"
volumes:
- name: policyconfig
configMap:
name: policyconfig
让我知道是否可以用这种方式实现
您可以使用 kube-mgmt 作为 sidecar 在 Kubernetes 之上管理 OPA。
kube-mgmt 自动发现存储在 Kubernetes 中的 ConfigMaps 中的策略并将它们加载到 OPA 中。 kube-mgmt 假定 ConfigMap 包含策略,如果 ConfigMap 是:
- 在 --policies 选项中列出的命名空间中创建。如果您指定 --policies=* 那么 kube-mgmt 将在所有命名空间中查找策略。
- 标有 openpolicyagent。org/policy=rego
https://medium.com/capital-one-tech/policy-enabled-kubernetes-with-open-policy-agent-3b612b3f0203
更新:
根据您当前的设置和要求,您需要添加 volumeMounts
才能使其正常工作
- name: opa
image: openpolicyagent/opa:latest
args:
- "run"
- "--server"
- "--addr=0.0.0.0:443"
- "--addr=0.0.0.0:8181"
- "--config-file=policyconfig"
volumeMounts:
- name: policyconfig
mountPath: /config
volumes:
- name: policyconfig
configMap:
name: policyconfig
或者,您可以使用 Gatekeeper. Which in addition to what kube-mgmt (Gatekeeper 1.0) has it also provides (per this):
- 一个可扩展的参数化策略库
- 用于实例化策略库的本机 Kubernetes CRD(又名 "constraints")
- 用于扩展策略库的原生 Kubernetes CRD(又名“约束
模板")
- 审计功能
另一个最近使用的工具是 MagTape。
看来我也在尝试实现相同的目标 - 通过 Envoy to OPA using bundle API.
我的包-API配置-
apiVersion: v1
kind: ConfigMap
metadata:
name: policyconfig
data:
config.yaml: |
services:
- name: controller
url: https://opa-bundle-bucket1.s3-us-west-1.amazonaws.com/bundles/authz.gz
bundles:
envoy/authz:
service: controller
resource: authz.gz
polling:
min_delay_seconds: 10
max_delay_seconds: 20
plugins:
envoy_ext_authz_grpc:
addr: :9191
path: envoy/authz/allow
dry-run: false
enable-reflection: false
我在 kubernetes 中的配置映射 -
kubectl create configmap policyconfig --from-file=./config/config.yaml
我的 Sidecar OPA -
- name: opa
# the latest released image of OPA-Envoy.
image: openpolicyagent/opa:latest-envoy
securityContext:
runAsUser: 1111
volumeMounts:
- readOnly: true
mountPath: /config
name: policyconfig
args:
- "run"
- "--server"
- "--addr=localhost:8181"
- "--diagnostic-addr=0.0.0.0:8282"
- "--set=plugins.envoy_ext_authz_grpc.addr=:9191"
- "--set=plugins.envoy_ext_authz_grpc.query=data.envoy.authz.allow"
- "--set=decision_logs.console=true"
- "--ignore=.*"
- "--config-file=/config/config.yaml"
volumes:
- name: policyconfig
configMap:
name: policyconfig
预期行为:-
Envoy 将调用 OPA,OPA 将请求发送到 bundle-server 以获取最新的策略和数据。
实际行为:-
Envoy 正在调用 OPA,但无法下载 OPA 策略。
Let me know what I am doing wrong here.
我正在尝试如下设置我的 OPA。
- OPA 作为 sidecar 安装在 Kubernetes 中
- 政策将作为捆绑包进行管理
- OPA 政策将通过单独的服务 [Bundle] 存储和提供
- 需要使用配置文件配置 OPA 以从外部服务获取策略
- 配置文件将作为配置映射存储在 kubernetes 中。
- 需要在 --config-file 中使用配置映射
我在 kubernetes 中的配置映射
kubectl create configmap policyconfig --from-file=./config/config.yaml
我的 Sidecar OPA
- name: opa
image: openpolicyagent/opa:latest
args:
- "run"
- "--server"
- "--addr=0.0.0.0:443"
- "--addr=0.0.0.0:8181"
- "--config-file=policyconfig"
volumes:
- name: policyconfig
configMap:
name: policyconfig
让我知道是否可以用这种方式实现
您可以使用 kube-mgmt 作为 sidecar 在 Kubernetes 之上管理 OPA。
kube-mgmt 自动发现存储在 Kubernetes 中的 ConfigMaps 中的策略并将它们加载到 OPA 中。 kube-mgmt 假定 ConfigMap 包含策略,如果 ConfigMap 是:
- 在 --policies 选项中列出的命名空间中创建。如果您指定 --policies=* 那么 kube-mgmt 将在所有命名空间中查找策略。
- 标有 openpolicyagent。org/policy=rego
https://medium.com/capital-one-tech/policy-enabled-kubernetes-with-open-policy-agent-3b612b3f0203
更新:
根据您当前的设置和要求,您需要添加 volumeMounts
才能使其正常工作
- name: opa
image: openpolicyagent/opa:latest
args:
- "run"
- "--server"
- "--addr=0.0.0.0:443"
- "--addr=0.0.0.0:8181"
- "--config-file=policyconfig"
volumeMounts:
- name: policyconfig
mountPath: /config
volumes:
- name: policyconfig
configMap:
name: policyconfig
或者,您可以使用 Gatekeeper. Which in addition to what kube-mgmt (Gatekeeper 1.0) has it also provides (per this):
- 一个可扩展的参数化策略库
- 用于实例化策略库的本机 Kubernetes CRD(又名 "constraints")
- 用于扩展策略库的原生 Kubernetes CRD(又名“约束 模板")
- 审计功能
另一个最近使用的工具是 MagTape。
看来我也在尝试实现相同的目标 - 通过 Envoy to OPA using bundle API.
我的包-API配置-
apiVersion: v1
kind: ConfigMap
metadata:
name: policyconfig
data:
config.yaml: |
services:
- name: controller
url: https://opa-bundle-bucket1.s3-us-west-1.amazonaws.com/bundles/authz.gz
bundles:
envoy/authz:
service: controller
resource: authz.gz
polling:
min_delay_seconds: 10
max_delay_seconds: 20
plugins:
envoy_ext_authz_grpc:
addr: :9191
path: envoy/authz/allow
dry-run: false
enable-reflection: false
我在 kubernetes 中的配置映射 - kubectl create configmap policyconfig --from-file=./config/config.yaml
我的 Sidecar OPA -
- name: opa
# the latest released image of OPA-Envoy.
image: openpolicyagent/opa:latest-envoy
securityContext:
runAsUser: 1111
volumeMounts:
- readOnly: true
mountPath: /config
name: policyconfig
args:
- "run"
- "--server"
- "--addr=localhost:8181"
- "--diagnostic-addr=0.0.0.0:8282"
- "--set=plugins.envoy_ext_authz_grpc.addr=:9191"
- "--set=plugins.envoy_ext_authz_grpc.query=data.envoy.authz.allow"
- "--set=decision_logs.console=true"
- "--ignore=.*"
- "--config-file=/config/config.yaml"
volumes:
- name: policyconfig
configMap:
name: policyconfig
预期行为:- Envoy 将调用 OPA,OPA 将请求发送到 bundle-server 以获取最新的策略和数据。
实际行为:- Envoy 正在调用 OPA,但无法下载 OPA 策略。
Let me know what I am doing wrong here.