Kubernetes
一、基础知识
1. 概念和术语
2. Kubernetes特性
3. 集群组件
4. 抽象对象
5. 镜像加速下载
二、安装部署kubeadm
1. 基础环境准备
2. 安装runtime容器(Docker)
3. 安装runtime容器(Contained)
4. Containerd进阶使用
5. 部署kubernets集群
6. 部署calico网络组件
7. 部署NFS文件存储
8. 部署ingress-nginx代理
9. 部署helm包管理工具
10. 部署traefik代理
11. 部署dashboard管理面板(官方)
12. 部署kubesphere管理面板(推荐)
12. 部署metrics监控组件
13. 部署Prometheus监控
14. 部署elk日志收集
15. 部署Harbor私有镜像仓库
16. 部署minIO对象存储
17. 部署jenkins持续集成工具
三、kubectl命令
1. 命令格式
2.node操作常用命令
3. pod常用命令
4.控制器常用命令
5.service常用命令
6.存储常用命令
7.日常命令总结
8. kubectl常用命令
四、资源对象
1. K8S中的资源对象
2. yuml文件
3. Kuberbetes YAML 字段大全
4. 管理Namespace资源
5. 标签与标签选择器
6. Pod资源对象
7. Pod生命周期与探针
8. 资源需求与限制
9. Pod服务质量(优先级)
五、资源控制器
1. Pod控制器
2. ReplicaSet控制器
3. Deployment控制器
4. DaemonSet控制器
5. Job控制器
6. CronJob控制器
7. StatefulSet控制器
8. PDB中断预算
六、Service和Ingress
1. Service资源介绍
2. 服务发现
3. Service(ClusterIP)
4. Service(NodePort)
5. Service(LoadBalancer)
6. Service(ExternalName)
7. 自定义Endpoints
8. HeadlessService
9. Ingress资源
10. nginx-Ingress案例
七、Traefik
1. 知识点梳理
2. 简介
3. 部署与配置
4. 路由(IngressRoute)
5. 中间件(Middleware)
6. 服务(TraefikService)
7. 插件
8. traefikhub
9. 配置发现(Consul)
10. 配置发现(Etcd)
八、存储
1. 配置集合ConfigMap
6. downwardAPI存储卷
3. 临时存储emptyDir
2. 敏感信息Secret
5. 持久存储卷
4. 节点存储hostPath
7. 本地持久化存储localpv
九、rook
1. rook简介
2. ceph
3. rook部署
4. rbd块存储服务
5. cephfs共享文件存储
6. RGW对象存储服务
7. 维护rook存储
十、网络
1. 网络概述
2. 网络类型
3. flannel网络插件
4. 网络策略
5. 网络与策略实例
十一、安全
1. 安全上下文
2. 访问控制
3. 认证
4. 鉴权
5. 准入控制
6. 示例
十二、pod调度
1. 调度器概述
2. label标签调度
3. node亲和调度
4. pod亲和调度
5. 污点和容忍度
6. 固定节点调度
十三、系统扩展
1. 自定义资源类型(CRD)
2. 自定义控制器
十四、资源指标与HPA
1. 资源监控及资源指标
2. 监控组件安装
3. 资源指标及其应用
4. 自动弹性缩放
十五、helm
1. helm基础
2. helm安装
3. helm常用命令
4. HelmCharts
5. 自定义Charts
6. helm导出yaml文件
十六、k8s高可用部署
1. kubeadm高可用部署
2. 离线二进制部署k8s
3. 其他高可用部署方式
十七、日常维护
1. 修改节点pod个数上限
2. 集群证书过期更换
3. 更改证书有效期
4. k8s版本升级
5. 添加work节点
6. master节点启用pod调度
7. 集群以外节点控制k8s集群
8. 删除本地集群
9. 日常错误排查
10. 节点维护状态
11. kustomize多环境管理
12. ETCD节点故障修复
13. 集群hosts记录
14. 利用Velero对K8S集群备份还原与迁移
15. 解决K8s Namespace无法正常删除的问题
16. 删除含指定名称的所有资源
十八、k8s考题
1. 准备工作
2. 故障排除
3. 工作负载和调度
4. 服务和网络
5. 存储
6. 集群架构、安装和配置
本文档使用 MrDoc 发布
-
+
home page
4. 网络策略
# 一、概述 1. 用于控制分组的Pod资源彼此之间如何进行通信,以及分组的Pod资源如何与其他网络端点进行通信的规范。它用于为Kubernetes实现更为精细的流量控制,实现租户隔离机制。Kubernetes使用标准的资源对象“NetworkPolicy”供管理员按需定义网络访问控制策略 2. 核心概念  - Ingress(类似安全组的内外网入):能接受哪些客户端的访问(-from,ports:自己端口) - egress(类似安全组的内外网出):能访问哪些目标(-to,ports:目标端口) - 每种方向的控制策略则包含“允许”和“禁止”两种。默认情况下,Pod处于非隔离状态,它们的流量可以自由来去。 - 当对应区域有多条规则时,满足其一即可。 # 二、配置网络策略 1. 管理过程 - 由namespaceSelector选定名称空间后,NetworkPolicy对象使用标签选择器由ipBlock或podSelector选择出一组Pod资源作为控制对象。 - 一旦名称空间中有任何NetworkPolicy对象匹配了某特定的Pod对象,则该Pod将拒绝Network-Policy所不允许的一切连接请求,而那些未被任何NetworkPolicy对象匹配到的其他Pod对象仍可接受所有流量。 - 一旦在spec.policyTypes中指定了生效的规则类型,却在networkpolicy.spec字段中嵌套定义了没有任何规则的Ingress或Egress字段时,则表示拒绝相关方向上的一切流量。 2. 定义网络策略时常用到的术语及说明具体。 - Pod组:由网络策略通过Pod选择器选定的一组Pod的集合,它们是规则生效的目标Pod;可由NetworkPolicy对象通过macthLabel或matchExpression选定。 - Egress:出站流量,即由特定的Pod组发往其他网络端点的流量,通常由流量的目标网络端点(to)和端口(ports)来进行定义。 - Ingress:入站流量,即由其他网络端点发往特定Pod组的流量,通常由流量发出的源站点(from)和流量的目标端口所定义。 - 端口(ports):TCP或UDP的端口号。 - 端点(to,<br />from):流量目标和流量源相关的组件,它可以是CIDR格式的IP地址块(ipBlock)、网络名称空间选择器(namespaceSelector)匹配的名称空间,或Pod选择器(podSelector)匹配的Pod组。<br />无论是Ingress还是Egress流量,与选定的某Pod组通信的另一方都可使用“网络端点”予以描述,它通常是某名称空间中的一个或一组Pod资源。 3. 管控入站流量规则<br />在Ingress规则中嵌套from和ports字段即可匹配特定的入站流量,from字段的值是一个对象列表,它可嵌套使用ipBlock、namespaceSelector和podSelector字段来定义流量来源。 | ipBlock | Object | 根据IP地址或网络地址块选择流量源端点 | | --- | --- | --- | | namespaceSelector | Object | 基于集群级别的标签挑选名称空间,它将匹配由此标签选择器选出的所有名称空间内的所有Pod对象;空值表示所有的名称空间,即源站点为所有名称空间内的所有Pod对象 | | podSelector | Object | 于NetworkPolicy所在的当前名称空间内基于标签选择器挑选Pod资源,赋予字段以空值来表示挑选当前名称空间内的所有Pod对象 | | ports | Object | 它嵌套port和protocol来定义流量的目标端口,即由NetworkPolicy匹配到的当前名称空间内的所有Pod资源上的端口 | | port | string | 端口号或在Container上定义的端口名称,未定义时匹配所有端口 | | protocol | string | 传输层协议的名称,TCP或UDP,默认为TCP | 4. 管控出站流量规则<br />networkpolicy.spec中嵌套的Egress字段用于定义入站流量规则,就特定的Pod集合来说,出站流量一样默认处于放行状态,除非在所有入站策略中至少有一条规则能够明确匹配到它。Egress字段的值是一个字段列表,它主要由以下两个字段组成。 | to | Object | 由当前策略匹配到的Pod资源发起的出站流量的目标地址列表,多个项目之间为“或”(OR)关系;若未定义或字段值为空则意味着应用于所有目标地址(默认为不限制);若明确给出了主机地址列表,则只有目标地址匹配列表中的主机地址的出站流量被放行 | | --- | --- | --- | | ports | Object | 出站流量的目标端口列表,多个端口之间为“或”(OR)关系;若未定义或字段值为空则意味着应用于所有端口(默认为不限制);若明确给出了端口列表,则只有目标端口匹配列表中的端口的出站流量被放行 | # 三、Calico安装 1. Calico官网:<br />[https://docs.projectcalico.org/v3.10/getting-started/kubernetes/installation/flannel](https://docs.projectcalico.org/v3.10/getting-started/kubernetes/installation/flannel) 2. 安装calico的canal插件:<br />curl [https://docs.projectcalico.org/v3.10/manifests/canal.yaml](https://docs.projectcalico.org/v3.10/manifests/canal.yaml) -O - 如果使用的是pod cidr 10.244.0.0/16,请跳到下一步。如果您使用的是不同的pod cidr,请使用以下命令来设置包含pod cidr的环境变量pod<br />cidr,并将清单中的10.244.0.0/16替换为pod cidr。 POD_CIDR="<your-pod-cidr>"<br />sed -i -e "s?10.244.0.0/16?$POD_CIDR?g" canal.yaml 3. 部署canal插件:<br />`kubectl apply -f canal.yaml` 4. 使用kubectl get pods -n kube-system中查看安装进程。  # 四、示例 1. 管控入站流量-设置默认的Ingress策略 - 通过policyTypes字段指明要生效Ingress类型的规则,但未定义任何Ingress字段,因此不能匹配到任一源端点,从而拒绝所有入站 ```yaml apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: deny-all-ingress spec: podSelector: {} policyTypes: ["Ingress"] ``` 2. 管控入站流量-放行特定的入站流量 - 将default名称空间中拥有标签“app=myapp”的Pod资源的80/TCP端口开放给10.244.0.0/16网络内除10.244.3.0/24子网中的所有源端点,以及当前名称空间中拥有标签“app=myapp”的所有Pod资源访问,其他未匹配到的源端点的流量默认为允许访问。 ```yaml apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-myapp-ingress namespace: default spec: podSelector: matchLabels: app: myapp policyTypes: ["Ingress"] ingress: - from: - ipBlock: cidr: 10.244.0.0/16 except: -10.244.3.0/24 - podSelector: matchLabels: app: myapp ports: - protocol: TCP port: 80 ``` 3. 管控出站流量-设置默认的Egress策略 - 通过policyTypes字段指明要生效Egress类型的规则,但未定义任何Egress字段,因此不能匹配到任何目标端点,从而拒绝所有的入站流量 ```yaml apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: deny-all-egress spec: podSelector: {} policyTypes: ["Egress"] ``` 4. 管控出站流量-管控出站流量-设置默认的Egress策略 - 对来自拥有“app=tomcat”的Pod对象的,到达标签为“app=nginx”的Pod对象的80端口,以及到达标签为“app=mysql”的Pod对象的3306端口的流量给予放行 ```yaml apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-tomcat-egress namespace: default spec: podSelector: matchLabels: app: tomcat policyTypes: ["Egress"] egress: - to: - podSelector: matchLabels: app: nginx ports: - protocol: TCP port: 80 - to: - podSelector: matchLabels: app: mysql ports: - protocol: TCP port: 3306 ``` 5. 隔离名称空间 - 为default名称空间定义了相关的规则,在出站和入站流量默认均为拒绝的情况下,它用于放行名称空间内部的各Pod对象之间的通信,以及与kube-system名称空间内各Pod间的通信 ```yaml apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: namespace-deny-all namespace: default spec: policyTypes: ["Ingress", "Egress"] podSelector: {} --- apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: namespace- namespace: default spec: policyTypes: ["Ingress", "Egress"] podSelector: {} ingress: - from: - namespaceSelector: matchExpressions: - key: name operator: In values: ["default", "kube-system"] egress: - to: - namespaceSelector: matchExpressions: - key: name operator: In values: ["default", "kube-system"] ```
Nathan
June 28, 2024, 4:11 p.m.
转发文档
Collection documents
Last
Next
手机扫码
Copy link
手机扫一扫转发分享
Copy link
Markdown文件
PDF文件
Docx文件
share
link
type
password
Update password