容器服务 安全容器

Kata Containers 是一种开源的安全容器运行时,通过轻量级虚拟机技术为容器提供虚拟机级别的安全隔离。TKE 原生节点支持 Kata 运行时,适用于多租户隔离、安全敏感业务等场景。

相关产品
容器服务 产品页,含版本规格、价格与购买入口。

二、核心优势

·强隔离性:每个 Pod 运行在独立的轻量级虚拟机中,提供 VM 级别的安全隔离。

·兼容性:完全兼容 Kubernetes 和 OCI 标准,无需修改应用代码。

·多运行时支持:提供 kata-clh 和 kata-qemu 两种运行时类型。

三、适用场景

·多租户工作负载隔离。

·运行不可信代码或处理敏感数据。

·Agent Sandbox 沙箱环境。

·满足金融、政务等行业的安全合规要求。

五、前置条件

限制项 要求
集群版本 Kubernetes >= 1.30
节点类型 仅支持原生节点
实例类型 仅支持 BMS5 裸金属实例
操作系统 Tencent OS 4

七、不兼容字段

由于 Kata 容器运行在独立的轻量级虚拟机中,以下 Kubernetes Pod 字段不被支持:

字段 说明 替代方案
hostNetwork: true 无法使用宿主机网络 使用 NodePort 或 LoadBalancer Service
hostIPC: true 无法共享宿主机 IPC 通过网络通信或共享存储
hostPID: true 无法共享宿主机 PID 使用 Sidecar 容器模式
shareProcessNamespace: true 不支持进程命名空间共享 使用网络通信或共享存储
privileged: true 不支持特权模式 移除特权依赖,使用 capabilities

八、完全兼容字段

以下字段在 Kata 运行时中完全兼容,无需修改:

·调度相关: nodeSelector, nodeName, affinity, tolerations, priority

·网络相关: dnsPolicy, dnsConfig, hostname, subdomain

·存储相关: volumes, volumeMounts, configMap, secret, emptyDir, persistentVolumeClaim

·服务账户: serviceAccount, serviceAccountName

·生命周期: initContainers, restartPolicy, livenessProbe, readinessProbe

九、网络限制

·不支持 HostNetwork 模式:Kata 容器网络栈与宿主机隔离。

·网络模式待验证:建议在生产环境前进行充分测试。

十、监控与日志限制

功能 支持情况
监控指标 – Pod 级别 支持
监控指标 – Container 级别 不支持
日志采集 – CLS 当前不可用

十三、控制台操作

1. 登录 腾讯云容器服务控制台。

2. 选择目标原生集群,进入节点管理 > 节点池。

3. 单击新建,选择原生节点。

4. 单击创建,在新建节点管理页面中:

·选择机型配置,选择 BMS5 系列裸金属实例。

·在高级设置中,开启安全容器(Kata 运行时) 选项。

5. 完成其他配置后,单击创建节点池。

十四、YAML 操作

·特性开关位置:spec.template.spec.metadata.annotations

·参数值:node.tke.cloud.tencent.com/container-runtime: kata

·需指定操作系统镜像:node.tke.cloud.tencent.com/image-label: ts4-public

可参考如下 YAML 示例直接在集群创建原生节点:

apiVersion: node.tke.cloud.tencent.com/v1beta1kind: MachineSetmetadata: annotations: capacity.cluster-autoscaler.kubernetes.io/extended-resources: '{"tke.cloud.tencent.com/qgpu-core":0,"tke.cloud.tencent.com/qgpu-memory":0,"tke.cloud.tencent.com/sub-eni":0}' node.tke.cloud.tencent.com/container-runtime: kata node.tke.cloud.tencent.com/deletion-protection: "true" node.tke.cloud.tencent.com/direct-eni: "31" node.tke.cloud.tencent.com/hostname-pattern: "" node.tke.cloud.tencent.com/image-label: ts4-public node.tke.cloud.tencent.com/memoryGb: "768" node.tke.cloud.tencent.com/route-eni: "285" node.tke.cloud.tencent.com/security-groups-spread: "false" node.tke.cloud.tencent.com/specify-delete-machines: "" node.tke.cloud.tencent.com/update-existed-nodes: "false" node.tke.cloud.tencent.com/update-existed-nodes-metadata: disable node.tke.cloud.tencent.com/update-existed-nodes-security-group: disable node.tke.cloud.tencent.com/vCPU: "208"spec: autoRepair: false deletePolicy: Newest displayName: xd-test-kata healthCheckPolicyName: "" instanceTypes: – BMS5.52XLARGE768 replicas: 1 scaling: createPolicy: ZonePriority selector: matchLabels: node.tke.cloud.tencent.com/machineset: np-xxx subnetIDs: – subnet-xxx template: metadata: annotations: node.tke.cloud.tencent.com/cluster-cloud-tags: '[{"tagKey":"xxx","tagValue":"xxxx"}]' node.tke.cloud.tencent.com/container-runtime: kata node.tke.cloud.tencent.com/image-label: ts4-public node.tke.cloud.tencent.com/machine-cloud-tags: '[]' labels: node.tke.cloud.tencent.com/machineset: np-l2oj4hdn spec: metadata: annotations: node.tke.cloud.tencent.com/automation-service: "true" node.tke.cloud.tencent.com/container-runtime: kata node.tke.cloud.tencent.com/image-label: ts4-public node.tke.cloud.tencent.com/monitor-service: "true" node.tke.cloud.tencent.com/security-agent: "false" providerSpec: type: NativeCVM value: instanceChargeType: PostpaidByHour keyIDs: – skey-xxx lifecycle: {} management: {} metadata: creationTimestamp: null securityGroupIDs: – sg-xxx systemDisk: DiskPartition: "" diskSize: 50 diskType: CloudBSSD runtimeRootDir: /var/lib/containerd type: Native

十五、验证节点池创建成功

节点池创建完成后,检查节点是否已支持 Kata 运行时:

# 查看带有 kata-runtime 标签的节点kubectl get nodes -l katacontainers.io/kata-runtime=true# 预期输出NAME STATUS ROLES AGE VERSIONkata-node-1 Ready <none> 10m v1.24.0kata-node-2 Ready <none> 10m v1.24.0

十七、查看可用的 RuntimeClass

kubectl get runtimeclass# 预期输出NAME HANDLER AGEkata-clh kata-clh 5mkata-qemu kata-qemu 5m

RuntimeClass 选择建议:

·kata-clh:性能优先,启动更快,资源占用更低。

·kata-qemu:兼容性优先,功能更完善,稳定性更好。

十八、示例:部署 Nginx 应用

创建 nginx-kata.yaml 文件:

apiVersion: apps/v1kind: Deploymentmetadata: name: nginx-kata namespace: defaultspec: replicas: 2 selector: matchLabels: app: nginx-kata template: metadata: labels: app: nginx-kata spec: runtimeClassName: kata-qemu # 指定使用 kata-qemu 运行时 containers: – name: nginx image: nginx:1.24.0 ports: – containerPort: 80 resources: requests: cpu: 100m memory: 128Mi limits: cpu: 200m memory: 256Mi—apiVersion: v1kind: Servicemetadata: name: nginx-kata-service namespace: defaultspec: type: LoadBalancer selector: app: nginx-kata ports: – port: 80 targetPort: 80

部署应用:

# 部署应用kubectl apply -f nginx-kata.yaml# 查看 Pod 状态kubectl get pods -l app=nginx-kata -o wide# 预期输出NAME READY STATUS RESTARTS AGE IP NODEnginx-kata-5f8d9c7b4d-abc12 1/1 Running 0 1m 10.244.1.10 kata-node-1nginx-kata-5f8d9c7b4d-def34 1/1 Running 0 1m 10.244.1.11 kata-node-2# 验证 Pod 是否运行在 Kata 容器中kubectl exec -it nginx-kata-5f8d9c7b4d-abc12 — cat /proc/1/cgroup# 输出应包含 kata 相关信息

20、1. 资源规划

Kata 容器需要额外的资源开销,建议在 Pod 配置中预留:

resources: requests: cpu: 200m # 建议比普通容器多 5%-10% memory: 256Mi # 建议比普通容器多 10%-20% limits: cpu: 400m memory: 512Mi

21、2. 健康检查配置

Kata 容器启动时间略长,建议调整健康检查参数:

livenessProbe: httpGet: path: /health port: 8080 initialDelaySeconds: 30 # 增加初始延迟 periodSeconds: 10 timeoutSeconds: 5readinessProbe: httpGet: path: /ready port: 8080 initialDelaySeconds: 20 # 增加初始延迟 periodSeconds: 5 timeoutSeconds: 3

22、3. RuntimeClass 选择

# 性能优先场景(启动快、资源占用低)runtimeClassName: kata-clh# 兼容性优先场景(功能完善、稳定性好)runtimeClassName: kata-qemu

23、4. 节点池隔离

建议将 Kata 节点和普通容器节点分开管理。

25、1. 创建节点池时提示“不支持该机型”

原因:当前仅支持 BMS5 系列裸金属实例。

解决方案:在控制台选择 BMS5 系列实例。

26、2. Pod 创建失败,提示字段不支持

常见错误:

·HostNetwork is not supported for kata containers

·hostPID is not supported

解决方案:检查 Pod 配置,移除不支持的字段(hostNetwork、hostIPC、hostPID、shareProcessNamespace、privileged),请参考这篇档的 字段兼容性限制。

27、3. Pod 一直处于 Pending 状态

排查步骤:

# 查看 Pod 事件kubectl describe pod <pod-name># 检查是否有 Kata 节点kubectl get nodes -l katacontainers.io/kata-runtime=true# 检查 RuntimeClass 是否存在kubectl get runtimeclass

常见原因:

·集群中没有 Kata 节点。

·RuntimeClass 不存在。

·节点资源不足。

·Pod 配置使用了不支持的字段。

28、4. Kata 容器启动慢

原因:Kata 容器需要启动轻量级虚拟机。

优化建议:

·使用 kata-clh 运行时,启动速度更快。

·使用镜像缓存。

·调整健康检查参数。

29、5. 无法采集 Container 级别监控指标

原因:当前版本暂不支持 Container 级别监控。

替代方案:

·使用 Pod 级别监控指标。

·在容器内暴露 Prometheus 指标。

·使用 Sidecar 方式部署监控 Agent。

赞 (0)
上一篇 4天前
下一篇 4天前