目录
示例四、限制其他命名空间中的pod访问podSelector匹配到的pod
3.3 RoleBinding:角色绑定、ClusterRolebinding:集群角色绑定
a. 把lucky这个用户添加到kubernetes集群中,可以用来认证apiserver的连接
(1)把lucky这个用户通过rolebinding绑定到clusterrole上
一.故事背景
今日继续深入,了解job和networkpolicy两个模块
二.Job & Cronjob
1.Job & Cronjob介绍
1、Job
Job 会创建一个或者多个 Pod,并将继续重试 Pod 的执行,直到指定数量的 Pod 成功终止。 随着 Pod 成功结束,Job 跟踪记录成功完成的 Pod 个数。 当数量达到指定的成功个数阈值时,任务(即 Job)结束。 删除 Job 的操作会清除所创建的全部 Pod。 挂起 Job 的操作会删除 Job 的所有活跃 Pod,直到 Job 被再次恢复执行。
一种简单的使用场景下,你会创建一个 Job 对象以便以一种可靠的方式运行某 Pod 直到完成。 当第一个 Pod 失败或者被删除(比如因为节点硬件失效或者重启)时,Job 对象会启动一个新的 Pod。
你也可以使用 Job 以并行的方式运行多个 Pod。
2、Cronjob
CronJob 创建基于时隔重复调度的 Job。
CronJob 用于执行排期操作,例如备份、生成报告等。 一个 CronJob 对象就像 Unix 系统上的 crontab(cron table)文件中的一行。 它用 Cron 格式进行编写, 并周期性地在给定的调度时间执行 Job。
2. 配置解读
1、Job配置
apiVersion: batch/v1 ## api版本
kind: Job ## 资源类型
metadata: ## 元数据
name: pi ## 资源名称
namespace: default ## 命名空间
spec: ## 详情
backoffLimit: 4 ## 最大失败次数
completions: 1 ## 要求完成的次数
parallelism: 1 ## 并发数量
activeDeadlineSeconds: 100 ## 最大运行时间
ttlSecondsAfterFinished: 20 ## ttl时间
template: ## Pod配置模板
spec: ## 规约
containers: ## 容器信息
- name: pi ## 容器名称
image: perl:5.34.0 ## 镜像
command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"] ## 容器运行命令
imagePullPolicy: IfNotPresent
restartPolicy: Never ## 重启策略
2、Cronjob配置
apiVersion: batch/v1 ## api版本
kind: CronJob ## 资源类型
metadata: ## 元数据
name: hello ## 资源名称
namespace: default ## 命名空间
spec: ## 详情
schedule: "* * * * *" ## 定时配置
successfulJobsHistoryLimit: 3 ## 保留运行完成pod的历史数量
jobTemplate: ## job配置模板
spec: ## job详细配置
template: ## pod配置模板
spec: ## pod详细配置
containers: ## 容器配置
- name: hello ## 容器名称
image: busybox:1.28 ## 容器镜像
imagePullPolicy: IfNotPresent ## 镜像拉取策略
command: ## 镜像启动运行命令
- /bin/sh
- -c
- date; echo Hello from the Kubernetes cluster
restartPolicy: OnFailure ## 重启策略
重启策略 restartPolicy
Never:当 Pod 失败时,Job 控制器会启动一个新的 Pod
OnFailure:Pod 继续留在当前节点,但容器会被重新运行
3. 演练
1、Job
1.1、创建job
apiVersion: batch/v1 ## api版本
kind: Job ## 资源类型
metadata: ## 元数据
name: pi ## 资源名称
namespace: default ## 命名空间
spec: ## 详情
backoffLimit: 4 ## 最大失败次数
completions: 1 ## 要求完成的次数
parallelism: 1 ## 并发数量
activeDeadlineSeconds: 100 ## 最大运行时间
ttlSecondsAfterFinished: 20 ## ttl时间
template: ## Pod配置模板
spec: ## 规约
containers: ## 容器信息
- name: pi ## 容器名称
image: perl:5.34.0 ## 镜像
command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"] ## 容器运行命令
imagePullPolicy: IfNotPresent
restartPolicy: Never ## 重启策略


1.2、查看job pod生命周期

1.3、查看job详细信息

1.4、查看job运行结果

2、Cronjob
2.1、创建Cronjob
apiVersion: batch/v1 ## api版本
kind: CronJob ## 资源类型
metadata: ## 元数据
name: hello ## 资源名称
namespace: default ## 命名空间
spec: ## 详情
schedule: "* * * * *" ## 定时配置
successfulJobsHistoryLimit: 3 ## 保留运行完成pod的历史数量
jobTemplate: ## job配置模板
spec: ## job详细配置
template: ## pod配置模板
spec: ## pod详细配置
containers: ## 容器配置
- name: hello ## 容器名称
image: busybox:1.28 ## 容器镜像
imagePullPolicy: IfNotPresent ## 镜像拉取策略
command: ## 镜像启动运行命令
- /bin/sh
- -c
- date; echo Hello from the Kubernetes cluster
restartPolicy: OnFailure ## 重启策略

2.2、查看Cronjob详情

2.3、查看pod生命周期



历史保留设置为3,在3个创建完成后,新创建会将之前的覆盖,然后只显示3个
2.4、查看运行结果

三.NetworkPolicy
1. 概述
在Kubernetes中,NetworkPolicy是一项关键功能,它允许开发者定义和控制Pod之间的网络通信。本文将深入研究Kubernetes中的NetworkPolicy,详细介绍其原理、用途,并通过实际示例演示如何使用NetworkPolicy来确保集群中的网络安全。
1、什么是NetworkPolicy?
NetworkPolicy是Kubernetes中用于定义Pod之间网络通信规则的资源对象。通过NetworkPolicy,开发者可以控制哪些Pod可以与另外哪些Pod通信,以及使用何种方式进行通信。这种细粒度的网络控制有助于提高集群的安全性,防止未经授权的访问和通信。
2、NetworkPolicy的基本原理
NetworkPolicy的工作原理基于以下几个核心概念:
-
Pod选择器(PodSelector)& namespaceSelector:NetworkPolicy使用标签选择器来选择特定的Pod。通过标签,可以将网络策略应用于特定的Pod群体。
-
Ingress规则:定义了允许从其他Pod进入被选中Pod的规则,包括允许的协议、端口范围等。
-
Egress规则:定义了允许被选中Pod访问其他Pod或外部网络的规则。
-
Peer Pod:NetworkPolicy中的规则是基于Peer Pod(对等Pod)的。通过选择Peer Pod,可以精确定义通信策略。
2. NetworkPolicy资源清单
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: test-network-policy
namespace: default
spec:
podSelector:
matchLabels:
app: backend #选择带有 app=backend 标签的 Pod 作为目标 Pod
ingress: #入站
- from:
- podSelector:
matchLabels:
app: frontend # 允许带有 app=frontend 标签的 Pod 访问目标 Pod
- ipBlock:
cidr: 192.168.1.0/24 # 允许来自 192.168.1.0/24 网段的流量访问目标 Pod
ports:
- protocol: TCP
port: 8080 # 只允许访问目标 Pod 的 8080 端口
egress: #出站
- to:
- podSelector:
matchLabels:
app: database # 允许目标 Pod 访问带有 app=database 标签的 Pod
ports:
- protocol: TCP
port: 3306 #目标 Pod 访问其他 Pod 时只允许使用 3306 端口
3. NetworkPolicy的示例
创建两个命名空间myns1和myns2
myns1
apiVersion: v1
kind: Pod
metadata:
name: pod-test1
labels:
app: alpine
namespace: myns1
spec:
containers:
- name: alpine
image: alpine:latest
imagePullPolicy: IfNotPresent
command: ["tail", "-f", "/dev/null"]
myns2
apiVersion: v1
kind: Pod
metadata:
name: pod-test1
labels:
app: alpine
namespace: myns2
spec:
containers:
- name: alpine
image: alpine:latest
imagePullPolicy: IfNotPresent
command: ["tail", "-f", "/dev/null"]

示例一:允许相同Namespace下的Pod通信
【注意】提前给命名空间设置labels
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-same-namespace
spec:
podSelector:
matchLabels:
app: myapp
policyTypes:
- Ingress
- Egress
ingress:
- from:
- namespaceSelector:
matchLabels:
project: myproject
egress:
- to:
- namespaceSelector:
matchLabels:
project: myproject
在上述清单文件中,我们创建了一个名为"allow-same-namespace"的NetworkPolicy,指定了Pod选择器为app: myapp。该策略允许来自同一命名空间下标签为project: myproject的Pod的Ingress和Egress通信。
示例二:限制外部访问
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: deny-external-traffic
spec:
podSelector:
matchLabels:
app: sensitive-app
policyTypes:
- Ingress
- Egress
ingress:
- from:
- podSelector: {}
egress:
- to:
- podSelector: {}
在这个示例中,我们创建了一个名为"deny-external-traffic"的NetworkPolicy,限制了标签为app: sensitive-app的Pod的Ingress和Egress。该策略允许Pod之间的通信,但不允许访问任何外部网络。
示例三:指定端口范围
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-specific-ports
spec:
podSelector:
matchLabels:
app: frontend
ingress:
- ports:
- protocol: TCP
port: 80
- protoc

最低0.47元/天 解锁文章
1947

被折叠的 条评论
为什么被折叠?



