Como he visto algunas publicaciones relacionadas pero ninguna respondió a mi pregunta, pensé en hacer una nueva pregunta basada en las sugerencias de otros usuarios también aquí .
Tengo la necesidad de hacer una etiqueta de selector para una política de red para un cronjob en ejecución que es responsable de conectarse a otros servicios dentro del clúster, hasta donde yo sé, no hay una forma fácil y directa de hacer una etiqueta de selector para los trabajos. pod ya que eso sería problemático con etiquetas de trabajo duplicadas si alguna vez existieron. No estoy seguro de por qué el cronjob no puede tener un selector en sí mismo, y luego se puede aplicar al trabajo y al pod.
También podría existir la posibilidad de simplemente configurar este cronjob en su propio espacio de nombres y luego permitir todo, desde ese espacio de nombres a lo que sea necesario en la política de red, pero no se siente como la forma correcta de superar ese problema.
Usando k8s v1.20
En primer lugar, para seleccionar pods (generados por su CronJob ) que NetworkPolicy debería permitir como fuentes de entrada o destinos de salida, puede establecer una etiqueta específica para esos pods.
Puede configurar fácilmente una etiqueta para Jobs generados por CronJob usando el campo de etiquetas (puede encontrar otro ejemplo con una explicación en la documentación de 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. ... Los pods generados por este CronJob tendrán las etiquetas type=mysql y workload=cronjob , con estas etiquetas puede crear/personalizar su 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 ... Por ejemplo mysql-workload NetworkPolicy permite conexiones a todos los pods en el espacio de nombres mysql desde cualquier pod con las etiquetas type=mysql y workload=cronjob (conjunción lógica) en un espacio de nombres con la etiqueta namespace-name=default :
NOTA: Tenga cuidado de usar YAML correcto (eche un vistazo a este ejemplo de namespaceSelector y 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 Para usar políticas de red, debe usar una solución de red que admita NetworkPolicy :
Las políticas de red son implementadas por el complemento de red. Para usar políticas de red, debe usar una solución de red que admita NetworkPolicy. La creación de un recurso NetworkPolicy sin un controlador que lo implemente no tendrá ningún efecto.
Puede obtener más información sobre cómo crear políticas de red de NetworkPolicies en la documentación de políticas de red.