背景
在 TKE 的集群中创立工作负载并把某一个对应的 cos 桶的根目录挂载到 /data 目录,在镜像构建的时候有把 /data 目录设置权限为 755,然而运行容器后胜利挂载 cos 桶的根目录到 /data/ 目录,发现用非 root 账号却无法访问 /data 上面的文件,镜像的启动用户是非 root 用户,查看容器内 /data 目录权限变成了 700。
为什么设置的目录权限是 755,挂载到 COS 后就变成了 700 权限呢?
起因剖析
测试启动 2 个 nginx 工作负载,一个负载将目录 /etc/nginx/conf.d 挂载到 cos 桶上,另一个工作负载失常运行不挂载,而后发现的确挂载 cos 后,默认会把目录权限变成 700。
TKE 中应用 cos 实质上是应用的 Cosfs,腾讯云官网文档 COSFS 工具应用外面能够查到这样一个参数-oallow_other
。如果要容许其余用户拜访挂在文件夹, 能够在容许 COSFS 的时候指定该参数。
COSFS 工具:https://cloud.tencent.com/document/product/436/6883?from=10680
解决方案
TKE 中如何配置 -oallow_other
参数?
在应用 cos 桶进行挂载的时候在 pv 创立界面是能够进行参数设置的,然而因为咱们习惯在控制台间接创立 pvc 关联 pv,而后 pv 会主动创立导致很多人没有去关注这个 cos 的参数。
形式一:手动创立
通过编写 yaml 文件来创立 pv,pvc
以下内容起源:https://github.com/TencentCloud/kubernetes-csi-tencentcloud/blob/master/docs/README_COSFS.md
pv-cos.yaml(须要关注 volumeAttributes 下的 additional_args 属性增加了 -oallow_other)
apiVersion: v1
kind: PersistentVolume
metadata:
name: "pv-cos"
spec:
accessModes:
- ReadWriteMany
capacity:
storage: 1Gi
csi:
driver: com.tencent.cloud.csi.cosfs
# Specify a unique volumeHandle like bucket name.(this value must different from other pv's volumeHandle)
volumeHandle: xxx
volumeAttributes:
# Replaced by the url of your region.
url: "http://cos.ap-guangzhou.myqcloud.com"
# Replaced by the bucket name you want to use.
bucket: "testbucket-1010101010"
# You can specify sub-directory of bucket in cosfs command in here.
# path: "/my-dir"
# You can specify any other options used by the cosfs command in here.
additional_args: "-oallow_other"
nodePublishSecretRef:
# Replaced by the name and namespace of your secret.
name: cos-secret
namespace: kube-system
pvc-cos.yaml(存储大小自行批改)
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-cos
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
# You can specify the pv name manually or just let kubernetes to bind the pv and pvc.
# volumeName: pv-cos
# Currently cos only supports static provisioning, the StorageClass name should be empty.
storageClassName: ""
kubectl apply -f pv-cos.yaml pvc-cos.yaml
$ kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pv-cos 1Gi RWX Retain Available 5s
$ kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
pvc-cos Bound pv-cos 1Gi RWX
形式二:控制台创立
1、创立 pv
在挂载选项填入 -oallow_other 这个参数,想填写多个参数空格分隔,cos 提供的参数配置选项能够参考:https://cloud.tencent.com/document/product/436/6883#.E5.B8.B8.E7.94.A8.E6.8C.82.E8.BD.BD.E9.80.89.E9.A1.B9
2、创立 pvc 并关联 pv
3、在工作负载中应用 pvc
4、验证对应的目录权限是否正确
进入容器中查看 /etc/nginx/conf.d 的目录不再是 700,创立一个 test 文件,也挂载到了 cos 桶