簡體   English   中英

io.k8s.api.core.v1.PodSecurityContext 中的未知字段“功能”(在容器/k8s pod 中運行 tshark)

[英]unknown field "capabilities" in io.k8s.api.core.v1.PodSecurityContext (running tshark in a container/k8s pod)

我已經構建了一個包含tshark的 docker 映像(我將使用該映像從 kubernetes pod 進行各種手動調試)。

我在 kubernetes 中部署了一個運行該映像的容器。 但是當我訪問容器並嘗試運行tshark時,我得到:

$ kubectl exec myapp-cbd49f587-w2swx -it bash
root@myapp-cbd49f587-w2swx:/# tshark -ni any -f "test.host" -w sample.pcap -F libpcap
Running as user "root" and group "root". This could be dangerous.
Capturing on 'any'
tshark: cap_set_proc() fail return: Operation not permitted

谷歌搜索該錯誤:

https://www.weave.works/blog/container-capabilities-kubernetes/ https://unofficial-kubernetes.readthedocs.io/en/latest/concepts/policy/container-capabilities/

看來我需要為我的容器/pod 配置一個securityContext 在我的 deployment.yaml 我添加了:

  containers:
     ...
  securityContext:
    capabilities:
      add:
        - NET_ADMIN

但是當我應用該部署時,我得到:

error: error validating "deployment.yaml": error validating data: ValidationError(Deployment.spec.template.spec.securityContext): unknown field "capabilities" in io.k8s.api.core.v1.PodSecurityContext; if you choose to ignore these errors, turn validation off with --validate=false

添加--validate=false會刪除錯誤,但也意味着 securityContext 被忽略。

是什么阻止我設置:

  securityContext:
    capabilities:
      add:
        - NET_ADMIN

根據我發現的指南,這應該沒問題。

我也看過(看起來是非免費的):

https://sysdig.com/blog/tracing-in-kubernetes-kubectl-capture-plugin/

所以可能正確的方法是使用類似的工具( ksniff )或設置一個邊車容器 但我仍然很好奇為什么會出現上述錯誤。

專門查看錯誤,您只發布了清單的一部分,並且查看此我們可以看到您將securityContext:放在與containers:相同的級別:

  containers:
     ...
  securityContext:
    capabilities:
      add:
        - NET_ADMIN

它應該在containers:文檔中所述:

要為容器添加或刪除 Linux 功能,請在容器清單的securityContext部分中包含capabilities字段。

例子:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: security-context-demo
spec:
  replicas: 2
  selector:
    matchLabels:
      app: security-context-demo
  template:
    metadata:
      labels:
        app: security-context-demo
    spec:
      containers:
      - name: sec-ctx-4
        image: gcr.io/google-samples/node-hello:1.0
        securityContext:
          capabilities:
            add:
            - NET_ADMIN

Linux 功能只能在容器級別的安全上下文中添加,而不是在 pod 級別。

這里並不明顯,但看到關於添加功能的部分僅提到將其添加到容器中:

https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-capabilities-for-a-container

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM