强制kubernetes入口cname格式



使用Kubernetes,在多租户环境中。,由RBAC控制,在创建新的Ingress cname时,我想强制使用cname格式,如:

${service}.${namespace}.${cluster}.kube.infra

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: ${servce}
spec:
tls:
- hosts:
- ${service}.${namespace}.${cluster}.kube.infra
secretName: conso-elasticsearch-ssl
rules:
- host: ${service}.${namespace}.${cluster}.kube.infra
http:
paths:
- path: /
backend:
serviceName: ${service}
servicePort: 9200

有可能吗?

您可以通过编写一个验证准入webhook来完成这项工作,该webhook会验证ingress yaml,如果cname格式不符合您的要求,则会拒绝它。更好的方法是使用开放策略代理(OPA(并编写rego策略。以下是关于如何使用OPA执行策略驱动的入口验证的指南。

package kubernetes.admission
import data.kubernetes.namespaces
operations = {"CREATE", "UPDATE"}
deny[msg] {
input.request.kind.kind == "Ingress"
operations[input.request.operation]
host := input.request.object.spec.rules[_].host
not fqdn_matches_any(host, valid_ingress_hosts)
msg := sprintf("invalid ingress host %q", [host])
}
valid_ingress_hosts = {
// valid hosts
}
fqdn_matches_any(str, patterns) {
fqdn_matches(str, patterns[_])
}
fqdn_matches(str, pattern) {
// validation logic
}
fqdn_matches(str, pattern) {
not contains(pattern, "*")
str == pattern
}

相关内容

  • 没有找到相关文章

最新更新