带有网络策略的 Kubernetes Cronjob 标签

Wah*_*eed 7 kubernetes

由于我看到的相关帖子很少,但没有人回答我的问题,我想我也会根据其他用户的建议在这里提出一个新问题。

我需要为正在运行的 cronjob 的网络策略创建一个选择器标签,该任务负责连接到集群中的其他一些服务,据我所知,没有简单直接的方法来为作业创建选择器标签因为如果重复的工作标签存在的话,这将会带来问题。不知道为什么 cronjob 本身不能有选择器,然后可以应用于作业和 pod。

也可能有一种可能性只是在它自己的命名空间中设置这个 cronjob,然后允许该命名空间中的所有内容到网络策略中所需的任何内容,但这感觉不是解决该问题的正确方法。

使用k8s v1.20

mat*_*t_j 17

首先,要选择CronJob应被允许作为NetworkPolicy入口源或出口目的地的 Pod(由您生成),您可以为这些 Pod 设置特定标签。

Jobs您可以使用 labels 字段轻松设置生成的标签(可以在OpenShift CronJobs 文档CronJob中找到另一个带有解释的示例):

---
apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: mysql-test
spec:
...
  jobTemplate:             
    spec:
      template:
        metadata:
          labels:          
            workload: cronjob # Sets a label for jobs spawned by this CronJob.
            type: mysql       # Sets another label for jobs spawned by this CronJob.
...
Run Code Online (Sandbox Code Playgroud)

由此产生的 PodCronJob将具有标签type=mysqlworkload=cronjob,使用此标签您可以创建/自定义您的NetworkPolicy

$ kubectl get pods --show-labels
NAME                          READY   STATUS      RESTARTS   AGE    LABELS
mysql-test-1615216560-tkdvk   0/1     Completed   0          2m2s   ...,type=mysql,workload=cronjob
mysql-test-1615216620-pqzbk   0/1     Completed   0          62s    ...,type=mysql,workload=cronjob
mysql-test-1615216680-8775h   0/1     Completed   0          2s     ...,type=mysql,workload=cronjob

$ kubectl describe pod mysql-test-1615216560-tkdvk
Name:         mysql-test-1615216560-tkdvk
Namespace:    default
...
Labels:       controller-uid=af99e9a3-be6b-403d-ab57-38de31ac7a9d
              job-name=mysql-test-1615216560
              type=mysql
              workload=cronjob
...
Run Code Online (Sandbox Code Playgroud)

例如,这允许从带有标签的命名空间mysql-workload NetworkPolicy中的任何 pod 连接到命名空间中的所有 pod (逻辑连接):注意:请小心使用正确的 YAML(查看此namespaceSelector 和 podSelector 示例)。mysqltype=mysqlworkload=cronjobnamespace-name=default

---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: mysql-workload
  namespace: mysql
spec:
  podSelector: {}
  policyTypes:
  - Ingress
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          namespace-name: default
      podSelector:
        matchLabels:
          type: mysql
          workload: cronjob
Run Code Online (Sandbox Code Playgroud)

要使用网络策略,您必须使用支持以下功能的网络解决方案NetworkPolicy

网络策略由网络插件实现。要使用网络策略,您必须使用支持 NetworkPolicy 的网络解决方案。创建没有实现它的控制器的 NetworkPolicy 资源将不会产生任何效果。

您可以NetworkPolicies网络策略文档中了解有关创建 Kubernetes 的更多信息。