Ingress Nginx 的灰度方案
在k8s环境下进行灰度,ingress-nginx自带了灰度注解, 这篇文章挺详细的https://v2-1.docs.kubesphere.io/docs/zh-CN/quick-start/ingress-canary/
再此之前有个需求, 根据请求header有没有特定的值,来判断是否进入灰度环境。当时的做法是在集群内用nginx
12345# 如果有个header叫grayif ($http_gray = "true") { proxy_pass http://nginx.test1:80; break;}
这种方式可以实现需求, 不过不灵活, 也不优雅, 搜了一下, 发现ingress nginx原生提供了灰度的方案
ingress自带canary部署简单来说就是部署了两套环境, 这两套一模一样, 只是在不同的namespace(同一个namespace需要取不同的名字),service和ingress域名都配置成一样的, 然后在canary环境的ingress上添加注解即可。
1234567891011121314151 ...
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的接收端必须在接收到完整有效的 proxy protocol 头部后才能开始处理连接数据。因此对于服务器的同一个监听端 ...
在CentOS7上安装新版本Git(2.x)
centos7 的默认源里面的git版本是1.8.3, 比较老了, 对于有些操作会提示git版本太低, 可以使用第三方源的方式来安装新版本的git
使用Wandisco源创建仓库文件
12345678cat > /etc/yum.repos.d/wandisco-git.repo <<-'EOF'[wandisco-git]name=Wandisco GIT Repositorybaseurl=http://opensource.wandisco.com/centos/7/git/$basearch/enabled=1gpgcheck=1gpgkey=http://opensource.wandisco.com/RPM-GPG-KEY-WANdiscoEOF
安装git1sudo yum install git
查看版本1git version
离线安装(手动安装rpm)下载两个文件到本地
12wget https://file.babudiu.com/f/yXCL/perl-Git-2.31.1-1.WANdisco.165709600 ...
Nginx配置双向认证
单项认证只需要服务器提供证书即可, 不验证客户端证书, 而双向认证需要验证服务器证书,也需要验证客户端证书, 不满足要求的客户端可以不允许其访问, 并且可以通过后期吊销证书的方式禁止其访问.
证书签名可以参考:
使用certbot自动申请ssl证书
使用acme.sh来自动更新https证书
制作和使用自签名证书
本文提到的 client.crt server.crt 都是通过ca签发的
服务器配置Nginx配置:
1234567891011121314151617server { listen 443 ssl; server_name localhost; ssl_certificate ssl/server.crt; # 配置证书位置 ssl_certificate_key ssl/server.key; # 配置私钥位置 ssl_client_certificate ssl/ca.crt; # 客户端证书 ssl_verify_c ...
制作和使用自签名证书
在很多使用到证书的场景, 比如HTTPS, 可以选择去申请一个免费的证书, 也可以尝试自签名证书, 申请免费证书请看:使用certbot自动申请ssl证书或者使用acme.sh来自动更新https证书, 本文介绍自签名证书.
SSL协议加密方式SSL协议即用到了对称加密也用到了非对称加密(公钥加密),在建立传输链路时,SSL首先对对称加密的密钥使用公钥进行非对称加密,链路建立好之后,SSL对传输内容使用对称加密。
对称加密 速度高,可加密内容较大,用来加密会话过程中的消息。
公钥加密 加密速度较慢,但能提供更好的身份认证技术,用来加密对称加密的密钥。
CA 证书生成 CA 私钥1openssl genrsa -out ca.key 4096
生成一个 ca.key 文件
生成 CA 证书交互式创建非交互式创建1openssl req -utf8 -new -x509 -days 3650 -key ca.key -out ca.crt
需要交互式输入:
提示
含义
输入内容
Country Name
国家
CN
State or Province Nam ...
Nginx设置图片防盗链
常见的使用Nginx进行防盗链配置是利用了referer, 也就是来源地址来判断, 只要不是白名单中的地址, 就禁止访问, referer是比较有效的方式, 但是可以轻松绕过, 目的是为了防止页面被别人复制粘贴我们的文章, 图片等资源依然使用我们的连接, 占用带宽或流量造成费用.
白名单模式这种模式就是在白名单之外的所有域名都不能请求我们的图片等资源
配置示例:
1234567891011121314151617181920212223242526# 资源防盗链(指定目录or指定文件类型) location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ { # location /upload/ { access_log off; # none:表示没有 referer 的可以访问 # blocked:表示 referer 没有值的可以访问 # server_names:表示 Nginx 的 server_name 可以访问 # ~.*google\.:google 前后都是正则匹配, ~表示后面的是正则匹配 ...
Kubernetes回滚应用之kubectl rollout
kubernetes 每次更新资源会记录资源的历史版本, 方便我们进行回滚操作。真的k8s解决了很多运维的痛点问题, 想起来以前没有用k8s的时候,用jenkins和ansible来做的发布和回滚…
查看历史版本12345678kubectl rollout history deployment nfs-client-provisionerdeployment.apps/nfs-client-provisionerREVISION CHANGE-CAUSE1 <none>2 <none>4 <none>5 <none>
这里列出的就是版本, 为什么没有3, 因为从版本4回滚到了版本3, 则版本3就变成了版本5
查看指定版本详情1kubectl rollout history deployment nfs-client-provisioner --revision=4
也可以以yaml格式输出
1kubectl rollout history deployment n ...
Kubeadm之单节点master升级高可用master
单节点升级master总体来说就是两步, 先修改apiserver地址为负载均衡地址,然后添加新的master节点。
搭建集群的时候我们注意一下就可以减少后期维护的烦恼,比如:
使用hostname而不是ip来作为kube-apiserver地址
单节点也把负载均衡安排上
假设已经有一个没有负载均衡的单节点master,现在想将它切换为高可用集群,记录以下步骤:
部署负载均衡参考部署负载均衡
更新证书
因为我们部署了负载均衡,所以需要通过负载均衡的地址来访问apiserver,因为证书是针对域名或者ip做的签名,如果ip变了证书就失效了,这也是为什么建议使用hostname来代替ip
如果你是用kubeadm init 来创建的集群,那么你需要导出一个kubeadm配置
1kubectl -n kube-system get configmap kubeadm-config -o jsonpath='{.data.ClusterConfiguration}' > kubeadm.yaml
添加证书SANs信息123456789101 ...
使用kubeasz搭建一套高可用的Kubernetes集群
kubeasz 是基于ansible和shell制作的工具,可以快速搭建一个高可用的k8s集群(二进制部署),不需要额外的负载均衡。项目地址:https://github.com/easzlab/kubeasz, kubeasz 每个版本对应了支持的k8s版本, 可以到项目主页查看, 这里使用 kubeasz版本3.0.0, 部署k8s 1.18.2
另见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安装ansible12yum install epel-release -yyum install ansible -y
下载ezdown部署工具123export ...
使用kubeadm部署一套高可用k8s集群 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(可选但建议)
123456vim /etc/hosts10.0.0.3 public kube-apiserver10.0.0.11 master110.0.0.12 master210.0.0.13 master3
每台机器都关闭防火墙和SELinux
负载均衡机器必须要关闭,因为6443不是nginx的标准端口,会被selin ...