kubernetes - Kubernetes Cronjob 标记
问题描述
由于我看到的相关帖子很少,但没有人回答我的问题,我想我也会根据其他用户的建议在这里提出一个新问题。
我需要为正在运行的 cronjob 的网络策略制作一个选择器标签,该 cronjob 负责连接到集群中的一些其他服务,据我所知,没有简单直接的方法来为作业制作选择器标签pod,因为如果它们存在重复的工作标签,那将是一个问题。不知道为什么 cronjob 本身不能有选择器,然后可以应用于作业和 pod。
也有可能只是将此 cronjob 设置在它自己的名称空间中,然后允许从该名称空间中的所有内容到网络策略中所需的任何内容,但感觉不是克服该问题的正确方法。
使用k8s v1.20
解决方案
首先,要选择作为入口源或出口目的地CronJob
应该允许的 pod(由 your 生成)NetworkPolicy
,您可以为这些 pod 设置特定标签。
您可以使用标签字段轻松设置Jobs
生成的CronJob
标签(可以在OpenShift CronJobs 文档中找到另一个带有解释的示例):
---
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.
...
由此产生的 PodCronJob
将具有标签type=mysql
和workload=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
...
例如,这mysql-workload
NetworkPolicy
允许mysql
从任何带有标签的 podtype=mysql
和workload=cronjob
(逻辑连接)在带有标签的命名空间中连接到命名空间中的所有 pod namespace-name=default
:
注意:小心使用正确的 YAML(查看这个namespaceSelector 和 podSelector 示例)。
---
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
要使用网络策略,您必须使用支持的网络解决方案NetworkPolicy
:
网络策略由网络插件实现。要使用网络策略,您必须使用支持 NetworkPolicy 的网络解决方案。在没有实现它的控制器的情况下创建 NetworkPolicy 资源将无效。
NetworkPolicies
您可以在网络策略文档中了解有关创建 Kubernetes的更多信息。
推荐阅读
- javascript - 如何从 S.fn.init 中的元素获取类作为字符串以及 innerHTML?
- java - 是否可以使用方法删除对象数组中的字符串元素?
- reactjs - 声明的道具类型中的错字:布尔(Eslint)
- mysql - MySQL 错误“'WITH' 在此位置对于此服务器版本无效,需要 ALTER、ANALYZE、...。”
- html - jQuery子元素不合作
- r - ggplot地图中的线粗细
- python - 我们可以在 xml 中使用 etree findall() 搜索多个模式吗?
- r - 按顺序粘贴列名
- vue.js - 如何改变b表的宽度
- flutter - 如何在 chart_flutter Graphs 中添加 Image 或 Widget?