结合 Prometheus 调整 Kubernetes 资源限制
转自: https://www.51cto.com/article/704723.html Kubernetes 资源限制往往是一个难以调整的配置,因为你必须在太严格或者太宽松的限制之间找到最佳的平衡点。 通过本文,你可以学习到如何设置正确的 Kubernetes 资源限制:从检测到无限制的容器,到找出你应该在集群中正确配置的 Kubernetes 资源限制。我们假设你使用 Prometheus 来监控你的 Kubernetes 集群。这就是为什么本文中的每个步骤都使用 PromQL 查询进行示例说明的原因。 检测没有 Kubernetes 资源限制的容器 设置正确的 Kubernetes 资源限制的第一步是检测没有任何限制的容器。没有 Kubernetes 资源限制的容器可能会在你的节点中造成非常严重的后果。在最好的情况下,节点将开始按顺序或评分驱逐 pod。由于 CPU 节流,它们也会出现性能问题。在最坏的情况下,节点将由于内存不足而被终止。 查找没有 Kubernetes 资源限制的容器 根据命名空间查找没有限制 CPU 的容器 1sum by (namespace...
解决镜像下载失败的几种方法
前言在学习、研究 Kubernetes 的过程中,经常遇到镜像拉取不了的网络问题,这并不是镜像本身的问题,而是国内的"国情"导致无法正常访问墙外资源。 这些镜像有的是 Kubernetes 团队自研的插件,也有一些是爱好者开发的第三方组件,正常来说,它们会存放于 gcr.io 或者 quay.io 中。 gcr.io 是谷歌的镜像仓库,在国内是禁止访问的 quay.io 是 Red Hat 的镜像仓库,可以访问,但速度较慢 那如何应对这种网络问题呢? 现成的镜像代理仓库k8s.gcr.io 源代理仓库这是 gcr.io/google-containers 的仓库,使用阿里云镜像: 123k8s.gcr.io/sig-storage/csi-node-driver-registrar:v2.3.0# 换成registry.aliyuncs.com/google_containers/csi-node-driver-registrar:v2.3.0 也可以使用 lank8s.cn,它们的对应关系:k8s.gcr.io → lank8s.cn,gcr.io →...
Kubernetes 获取客户端真实 IP:externalTrafficPolicy 深度解析
概述在 Kubernetes 中获取客户端真实 IP 是一个常见需求,但由于 kube-proxy 的 SNAT 机制,往往获取到的是中间节点的 IP。externalTrafficPolicy 字段提供了解决方案。 核心知识: 🔍 Service 外部流量策略 📡 客户端 IP 保留机制 ⚖️ Cluster vs Local 模式 🎯 负载均衡权衡 适用场景: 需要记录真实客户端 IP 访问控制和安全审计 流量分析和用户画像 地域识别和限流 externalTrafficPolicy 详解什么是 externalTrafficPolicy定义: externalTrafficPolicy 是 Kubernetes Service 中控制外部流量转发策略的字段,决定流量如何路由到 Pod 以及是否保留客户端源 IP。 可选值: 值 说明 默认 Cluster 流量可转发到任意节点的 Pod ✅ 是 Local 流量仅转发到本节点的 Pod ❌ 否 配置示例: 123456789101112apiVersion: v1kind: Servicem...
记录一次 Kubernetes 网络 DNS 问题排查过程
问题总结在 Kubernetes 环境下,服务间访问遇到多个 DNS 和网络相关问题: 问题 1:Alpine 镜像 DNS 解析失败服务使用 node:xxx-alpine 镜像,服务间访问报错:getaddrinfo EAI_AGAIN 问题 2:ClusterIP 访问超时非 Alpine 镜像,使用 ClusterIP 访问频繁出现超时问题:connect ECONNRESET、read ECONNRESET 以及 axios 的 timeout 问题 3:DNS 访问报错非 Alpine 镜像,使用 DNS 访问报错:getaddrinfo ENOTFOUND 问题 4:CoreDNS I/O 超时CoreDNS 报错:[ERROR] plugin/errors: 2 . NS: read udp 10.42.2.5:38764->183.60.82.98:53: i/o timeout 详细背景见:https://github.com/k3s-io/k3s/issues/5897 问题排查过程问题 1:Alpine 镜像 DNS 解析问题问题现象:...
k8s 环境下 Nginx 做 WebSocket 负载的方案梳理
websocket server websocket server demo:https://github.com/mrniko/netty-socketio-demo Dockerfile 123456FROM maven:3.8.5-openjdk-17 as buildWORKDIR /user/src/appCOPY . .RUN ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \ && mvn clean package -DskipTestsCMD mvn exec:java -f pom.xml 部署(保证pod可以被独立访问)statefulset方式 使用statefulset+headless service的方式对pod进行独立访问 DNS: pod名称-编号.headless名称.namespace.svc.cluster.local 123456789101112131415161718192021222324252627282930313233343536...
nginx大全学习网站
nginx大全学习网站
proxy_pass路径的唯一拼接规则
proxy_pass 只是HOST,不可以包含任何路径 如果proxy_pass后面没有任何URL路径信息(比如/,/xxx等),则反向代理的地址会包含location中的匹配部分,否则只会拼接匹配后的剩余路径 PS: 上面是最重要且唯一的一条规则,请记住 多种情况验证假设请求:http://localhost/online/wxapi/test/loginSwitch 第一种情况12345proxy_pass`结尾有`/location /online/wxapi/ { proxy_pass http://localhost:8080/; proxy_set_header X-Real-IP $remote_addr;} 代理后的实际地址:http://localhost:8080/test/loginSwitch 第二种情况12345proxy_pass`结尾没有`/location /online/wxapi/ { proxy_pass http://localhost:8080; pr...
关于nginx中proxy_set_header Host的设置
转自: https://blog.csdn.net/weixin_41585557/article/details/82426784 背景: nginx上配有aaa.example.com的虚拟主机,现在需要将访问http://aaa.example.com/api/x.x/client/的请求转到http://bbb.example.com/api/x.x/client/,bbb.example.com的虚拟主机在另外一台nginx上,其中x.x表示位数不定的版本号,如:1.0或1.20.345都可能。请求转过去要求url保持不变 用rewrite转发的话,url会发生变化的,那就用proxy_pass吧,于是添加了如下的配置: 123location ~ ^/api/([0-9]+)(\.[0-9]+)*/client/ { proxy_pass http://bbb.example.com;} 在现有环境的nginx里添加这段配置之后,访问却始终转不过去,查看nginx日志也只能看到是404信息,并没有更多定位问题的信息。检查了许久也没找到...
利用nginx实现客户端证书认证
生成crt/key1略 生成p12证书1openssl pkcs12 -export -clcerts -in rancher.sopei.k3s.cn.crt -inkey rancher.sopei.k3s.cn.key -out s.p12 需要把证书打包成p12格式的证书文件,然后在客户端的电脑上导入。同样的在生成p12文件的时候我们最好添加一个密码保护,这样就算证书泄露了也不会导致安全问题。 配置nginx1234# 客户端公钥证书ssl_client_certificate /path/to/root.crt;# 开启客户端证书验证ssl_verify_client on; Nginx配置Https单向认证、双向认证以及多证书配置: https://juejin.cn/post/6925361984183631885
记录 Nginx 正则规则
* 零次或者多次匹配前面的字符表达式,等效于{0,}.; zo*与“zo”和“zoo”匹配 + 一次或者多次匹配前面的字符表达式,等效于{1,};zo+与“zoo”匹配但是与“z”不匹配 ? 零次或一次匹配前面的字符或子表达式。当该字段紧随任何其他限定符(*、+、?、{n}、{n,}或{n,m})之后时,匹配模式是非常贪婪的,非贪婪模式匹配搜索到的、尽可能少的字符串,而默认的贪婪模式匹配搜索到的、尽可能多的字符串。zo? 与“z”和“zoo”不匹配;o+?只于“oooooo”中的单个o匹配。而o+与所有的“o”匹配。do(es)?与do或者does中的do匹配 ^ 匹配搜索字符串以什么开始。如果将^用作括号表达式中的第一个字符,则会对字符集求反,^\d{3}与搜索字符串开始出的3个数字匹配。[^abc]与除abc以外的任何字符匹配 $匹配搜索字符串以什么结尾,\d{3}$匹配任何3个数字结尾的 . 额这里其实是一个点号;匹配除了换行符\n之外的任何单个字符 [] 标记括号表达式的开始和结尾,[1-4]与1,2,3,4匹配。[^aAeE],除了a,A,e,E之外的匹配 ...
