You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 05:47:53