web-dev-qa-db-ja.com

io.k8s.api.core.v1.PodSecurityContextの不明なフィールド "capabilities"(コンテナー/ k8sポッドでtsharkを実行)

tsharkを含むDockerイメージをビルドしました(そのイメージは、kubernetesポッドからさまざまな手動デバッグを行うために使用します)。

そのイメージを実行している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 /

コンテナ/ポッドに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 )を使用するか、 サイドカーコンテナー をセットアップすることです。しかし、私はなぜ上記のエラーが発生するのか興味があります。

2
u123

特にエラーを見ると、マニフェストの一部のみを投稿しており、これを見るとsecurityContext:と同じレベルのcontainers:

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

documentation で記述されているように、コンテナの下にある必要があります。

コンテナのLinux機能を追加または削除するには、コンテナマニフェストのcapabilitiesセクションにsecurityContextフィールドを含めます。

例:

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
2
mWatney