1. 容器实践
我是构建无状态应用,环境的nginx+PHP,数据库单独买RDS。
nginx跟php拆分成了两个镜像,部署于同一个pod。
代码外挂在nas,创建存储卷。nginx的配置文件以及php的配置文件,也使用挂载配置项的方式。
2. 使用过程
2.1、多个pod,分布不同区域不同节点,数据库无法访问问题
是由于数据库白名单添加错误。集群网络插件是terway,需要把Pod的网段加入到数据库白名单,而不是node的IP
可以通过`kubectl get configmap -n kube-system eni-config -oyaml`查看对应的信息。
通过vswitches 里面的交换机去vpc控制台那边找对应的网段,添加到对应的白名单。
2.2、使用https
在配置项增加保密字典,把证书内容填过去,路由那边选择443接口,然后使用勾选tls,选择域名对应的证书。
2.3、强制跳转https
路由增加注解 nginx.ingress.kubernetes.io/ssl-redirect 值为true
2.4、nginx配置外挂
配置管理新增配置项,deployment 存储卷新增本地存储,选择配置项映射到目录 /etc/nginx/conf.d
2.5、pvc的设置
由于外挂的是nas,一个deployment只能挂一次,以此只在nginx容器那边挂云盘,deployment创建成功之后.
查看yaml,那边给php容器编辑,把nginx的外挂那段代码复制到php容器这边。
volumeMounts:
- mountPath: /var/www
name: volume-1673248202758
2.6、外挂php配置文件 新增php.ini的配置项
在创建deployment的时候,数据卷->本地存储,配置项,目录/usr/local/etc/php/php.ini 子目录 php.ini
2.7、如果有API接口供下游系统调用,要考虑外部https调用的版本,有可能部分客户端第三方只支持tls1.2
在配置项选择`kube-system`命名空间.
编辑`nginx-configuration` 增加ssl相关的配置ssl-protocols值设置为TLSv1.2 TLSv1.3
2.8、双向认证的配置
配置管理-保密字典 新建相关证书 Opaque类型,把证书导入。
路由设置相关注解nginx.ingress.kubernetes.io/auth-tls-secret
2.9、多个pod保持会话问题
增加注解 `nginx.ingress.kubernetes.io/affinity: cookie`
2.10、每个项目独立设置pvc
防止把整个目录挂载到pod,导致pod数据过大,影响性能,每个项目独立申明pvc,pvc挂载nas.
然后路径设置成子目录,这样每个pod挂载的数据都很小。
直接看挂载的ecs,有时候需要加很长一段nas的记录,有时候直接/就是根目录
2.11、nginx 413错误
nginx配置文件client_max_body设置了,但是还是提示413。
修改注解`nginx.ingress.kubernetes.io/proxy-body-size: "100m"`