如何在Kubernetes Network Policy的podSelector中使用正则表达式
问题描述
现有目标Pod定义如下:
apiVersion: v1 kind: Pod metadata: name: my-app-pod labels: app: my-app spec: containers: - name: my-app-container image: nginx
两个源Pod定义:
apiVersion: v1 kind: Pod metadata: name: my-other-app-pod1 labels: app: my-other-app1 spec: containers: - name: my-other-app-container image: busybox command: [ "sleep", "3600" ]
apiVersion: v1 kind: Pod metadata: name: my-other-app-pod2 labels: app: my-other-app2 spec: containers: - name: my-other-app-container2 image: busybox command: [ "sleep", "3600" ]
希望编写Network Policy允许两个源Pod访问目标Pod,尝试用app: my-other-app*的正则匹配但未生效,目前已用In操作符实现,但业务需要正则匹配方式,请问如何在podSelector中使用正则表达式?
解决方案
Kubernetes的PodSelector不支持在matchLabels中直接使用通配符或正则,但可以通过matchExpressions结合Regexp操作符实现正则匹配逻辑。
以下是符合需求的Network Policy配置:
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-my-other-apps-access spec: podSelector: matchLabels: app: my-app # 精确匹配目标Pod policyTypes: - Ingress ingress: - from: - podSelector: matchExpressions: - key: app operator: Regexp values: - "^my-other-app.*$" # 正则匹配以my-other-app开头的标签值 ports: - protocol: TCP port: 80 # 允许访问nginx默认80端口
关键说明
Regexp操作符采用RE2正则语法,要确保表达式符合该规范- 示例中的
^my-other-app.*$明确匹配以my-other-app开头的所有标签值,刚好覆盖两个源Pod的app标签 - 若需开放其他端口,可自行修改
ports段的配置
内容的提问来源于stack exchange,提问作者chakravarthi
相关产品推荐
相关产品推荐

