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"`