Ingress Nginx 的灰度方案
在 k8s 环境下进行灰度,ingress-nginx 自带了灰度注解, 这篇文章挺详细的https://v2-1.docs.kubesphere.io/docs/zh-CN/quick-start/ingress-canary/ 再此之前有个需求, 根据请求 header 有没有特定的值,来判断是否进入灰度环境。当时的做法是在集群内用 nginx 这种方式可以实现需求, 不过不灵活, 也不优雅, 搜了一下, 发现 ingress nginx 原生提供了灰度的方案 ingress 自带 canary 部署简单来说就是部署了两套环境, 这两套一模一样, 只是在不同的 namespace(同一个 namespace 需要取不同的名字),service 和 ingress 域名都配置成一样的, 然后在 canary 环境的 ingress 上添加注解即可。 如何测试效果可以使用 echo server 来做测试容器, 请求它可以输出一些基本信息, 我们就知道访问到哪个 pod 了 测试过程
Nginx四层反向代理后端记录真实IP
使用 k8s 的 ingress 暴露服务,会有使用负载均衡反向代理 ingress 的情况,那么我们的 ingress 获取到的 ip 都是 4 层负载的 ip,比如常用架构图 4 层 Proxy Protocol 透传 tcp 工作在网络第 4 层,Proxy Protocol 就是在 tcp 中增加一个小的报头,用来存储额外的信息 代理协议即 Proxy Protocol,是 haproxy 的作者 Willy Tarreau 于 2010 年开发和设计的一个 Internet 协议,通过为 tcp 添加一个很小的头信息,来方便的传递客户端信息(协议栈、源 IP、目的 IP、源端口、目的端口等),在网络情况复杂又需要获取客户 IP 时非常有用。其本质是在三次握手结束后由代理在连接中插入了一个携带了原始连接四元组信息的数据包。 目前 proxy protocol 有两个版本,v1 仅支持 human-readable 报头格式(ASCIII 码),v2 需同时支持 human-readable 和二进制格式,即需要兼容 v1 格式proxy protocol 的接收端必须在接...
在CentOS7上安装新版本Git(2.x)
centos7 的默认源里面的 git 版本是 1.8.3, 比较老了, 对于有些操作会提示 git 版本太低, 可以使用第三方源的方式来安装新版本的 git 使用 Wandisco 源创建仓库文件 安装 git 查看版本 离线安装 (手动安装 rpm)下载两个文件到本地 安装
Nginx配置双向认证
单项认证只需要服务器提供证书即可, 不验证客户端证书, 而双向认证需要验证服务器证书,也需要验证客户端证书, 不满足要求的客户端可以不允许其访问, 并且可以通过后期吊销证书的方式禁止其访问. 证书签名可以参考: 使用certbot自动申请ssl证书 使用acme.sh来自动更新https证书 制作和使用自签名证书 本文提到的 client.crt server.crt 都是通过 ca 签发的 服务器配置Nginx 配置: 代理配置比如服务器是开启了双向认证的, 我想用一台 Nginx 做代理, 证书都绑定到这台代理机器上面, 平常访问就访问这台代理 Nginx 就行了, 客户端不用再配置证书了. Nginx 配置: 如果你遇到访问 nginx 报错 502 的,恰好你的系统又是 RedHat 系, 可以尝试关闭 Selinux 使用 curl 测试
使用openssl制作自签名HTTPS证书
在很多使用到证书的场景, 比如 HTTPS, 可以选择去申请一个免费的证书, 也可以尝试自签名证书, 申请免费证书请看:使用certbot自动申请ssl证书 或者 使用acme.sh来自动更新https证书, 本文介绍自签名证书. 可以直接使用我制作好的工具,支持自签名 HTTPS 证书和双向认证证书,纯 shell 脚本,支持 Docker 使用,一键生成证书:https://github.com/iuxt/my_cert SSL 协议加密方式SSL 协议即用到了对称加密也用到了非对称加密 (公钥加密),在建立传输链路时,SSL 首先对对称加密的密钥使用公钥进行非对称加密,链路建立好之后,SSL 对传输内容使用对称加密。 对称加密 速度高,可加密内容较大,用来加密会话过程中的消息。 公钥加密 加密速度较慢,但能提供更好的身份认证技术,用来加密对称加密的密钥。 CA 证书生成 CA 私钥 生成一个 ca.key 文件 生成 CA 证书非交互式创建交互式创建 需要交互式输入: 提示 含义 输入内容 Country Name 国家 CN State o...
Nginx设置图片防盗链
常见的使用 Nginx 进行防盗链配置是利用了 referer, 也就是来源地址来判断, 只要不是白名单中的地址, 就禁止访问, referer 是比较有效的方式, 但是可以轻松绕过, 目的是为了防止页面被别人复制粘贴我们的文章, 图片等资源依然使用我们的连接, 占用带宽或流量造成费用. 白名单模式这种模式就是在白名单之外的所有域名都不能请求我们的图片等资源 配置示例: 黑名单模式未完待续…
Kubernetes回滚应用之kubectl rollout
kubernetes 每次更新资源会记录资源的历史版本, 方便我们进行回滚操作。真的 k8s 解决了很多运维的痛点问题, 想起来以前没有用 k8s 的时候,用 jenkins 和 ansible 来做的发布和回滚… 查看历史版本 这里列出的就是版本, 为什么没有 3, 因为从版本 4 回滚到了版本 3, 则版本 3 就变成了版本 5 查看指定版本详情 回滚到指定版本 回滚到上一个版本可以不用增加 --to-revision=4 参数, 默认就是回滚上一个版本 记录版本变化执行命令记录变化在第一步查看历史版本, CHANGE-CAUSE 显示的是 none, 如果需要记录 kubectl 执行的命令,则执行命令的时候需要添加参数 这样就会把当前的命令记录到版本的 CHANGE-CAUSE 这一栏 设置历史版本数量在 yml 文件里面可以设置历史版本的数量, 比如: 查看历史版本如果只是更新了镜像,可以通过命令查看历史的镜像版本:
Kubeadm之单节点master升级高可用master
单节点升级 master 总体来说就是两步, 先修改 apiserver 地址为负载均衡地址,然后添加新的 master 节点。 搭建集群的时候我们注意一下就可以减少后期维护的烦恼,比如: 使用 hostname 而不是 ip 来作为 kube-apiserver 地址 单节点也把负载均衡安排上 假设已经有一个没有负载均衡的单节点 master,现在想将它切换为高可用集群,记录以下步骤: 部署负载均衡参考 Kubernetes之master高可用方案 更新证书 因为我们部署了负载均衡,所以需要通过负载均衡的地址来访问 apiserver,因为证书是针对域名或者 ip 做的签名,如果 ip 变了证书就失效了,这也是为什么建议使用 hostname 来代替 ip 如果你是用 kubeadm init 来创建的集群,那么你需要导出一个 kubeadm 配置 添加证书 SANs 信息 生成新的证书备份旧证书 生成新的证书 验证证书,确定包含新添加的 SAN 列表 重启 apiserver 保存新的配置这步操作其实是把 kubeadm 的配置给保存在集群中, 以...
使用kubeasz搭建一套高可用的Kubernetes集群
kubeasz 是基于 ansible 和 shell 制作的工具,可以快速搭建一个高可用的 k8s 集群(二进制部署),不需要额外的负载均衡。项目地址:https://github.com/easzlab/kubeasz, kubeasz 每个版本对应了支持的 k8s 版本, 可以到项目主页查看, 这里使用 kubeasz 版本 3.6.3, 部署 k8s 1.29.0 另见 kubeadm 部署在centos使用kubeadm部署k8s在ubuntu使用kubeadm部署k8s 安装准备准备机器如下: 机器 IP kubeasz 操作机 10.0.0.7 master1 10.0.0.31 master2 10.0.0.32 master3 10.0.0.33 worker1 10.0.0.41 首先确保操作机可以通过 ssh 连接到其他所有机器,最好密钥打通(这是使用 ansible 的必要条件) 安装 kubeasz下载 ezdown 部署工具 下载 kubeasz 离线包等下载的文件位于 /etc/kubeasz/ 目录中。 部...
使用kubeadm部署一套高可用k8s集群1.21 for CentOS
基于 centos 使用 kubeadm 搭建集群, ubuntu部署文档, 有疑问的地方可以看 官方文档 准备机器 我的机器详情如下, 配置至少为 4C4G hostname IP 作用 public 10.0.0.3 ingress 和 apiserver 的负载均衡,nfs 存储 master1 10.0.0.11 k8s master 节点 master2 10.0.0.12 k8s master 节点 master3 10.0.0.13 k8s master 节点 worker1 10.0.0.21 k8s worker 节点 worker2 10.0.0.22 k8s worker 节点 每台机器都做域名解析,或者绑定 hosts(可选但建议) 每台机器都关闭防火墙和 SELinux 负载均衡机器必须要关闭,因为 6443 不是 nginx 的标准端口,会被 selinux 拦截, 防火墙也需要放行 6443 端口, 可以考虑直接关闭 基础环境配置 基础环境是不管 master 还是 worker 都需要的环境 ...


