从零开始的云计算生活——第四十八天,自强不息,kubernetes模块之Job,NetworkPolicy与RBAC认证中心

目录

一.故事背景

二.Job & Cronjob

1.Job & Cronjob介绍

1、Job

2、Cronjob

2. 配置解读

1、Job配置

2、Cronjob配置

3. 演练

1、Job

1.1、创建job

1.2、查看job pod生命周期

1.3、查看job详细信息

1.4、查看job运行结果

2、Cronjob

2.1、创建Cronjob

2.2、查看Cronjob详情

2.3、查看pod生命周期

2.4、查看运行结果

三.NetworkPolicy

1. 概述

1、什么是NetworkPolicy?

2、NetworkPolicy的基本原理

2. NetworkPolicy资源清单

3. NetworkPolicy的示例

示例一:允许相同Namespace下的Pod通信

示例二:限制外部访问

示例三:指定端口范围

示例四、限制其他命名空间中的pod访问podSelector匹配到的pod

示例五、只访问外部网络和同命名空间下的pod

4. NetworkPolicy的高级用法(了解)

1、网络策略的继承

2、高级Peer Pod选择器匹配

四. RBAC认证中心

1. k8s安全管理:认证、授权、准入控制概述

1.1 认证

1.2 授权

2. ServiceAccount介绍

3. RBAC认证授权策略

3.1 Role:角色

3.2 ClusterRole:集群角色

3.3 RoleBinding:角色绑定、ClusterRolebinding:集群角色绑定

4. 资源的引用方式

5. 常见角色示例

6. 常见的角色绑定示例

7. 对Service Account的授权管理

8. 使用kubectl命令行工具创建资源对象

9. 限制不同的用户操作k8s集群

(1)生成一个私钥

(2)生成一个证书请求

(3)生成一个证书

a. 把lucky这个用户添加到kubernetes集群中,可以用来认证apiserver的连接

b. 在kubeconfig下新增加一个lucky这个账号

c. 切换账号到lucky,默认没有任何权限

(1)把lucky这个用户通过rolebinding绑定到clusterrole上

(2)切换到lucky这个用户

(3)测试是否有权限

添加一个lucky的普通用户

五.总结


一.故事背景

今日继续深入,了解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的工作原理基于以下几个核心概念:

  1. Pod选择器(PodSelector)& namespaceSelector:NetworkPolicy使用标签选择器来选择特定的Pod。通过标签,可以将网络策略应用于特定的Pod群体。

  2. Ingress规则:定义了允许从其他Pod进入被选中Pod的规则,包括允许的协议、端口范围等。

  3. Egress规则:定义了允许被选中Pod访问其他Pod或外部网络的规则。

  4. 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
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值