全部产品
Search
文档中心

Container Service for Kubernetes:[Tidak Direkomendasikan] Gunakan kebijakan keamanan pod

更新时间:Dec 10, 2025

Komponen admission control Kubernetes Pod Security Policy memvalidasi permintaan pembuatan dan pembaruan Pod di kluster Anda berdasarkan aturan yang Anda tentukan. Jika suatu permintaan tidak memenuhi aturan tersebut, sistem akan menolaknya dan mengembalikan error. Topik ini menjelaskan cara menggunakan kebijakan keamanan pod di Container Service for Kubernetes (ACK).

Prasyarat

Anda telah menyelesaikan operasi berikut:

Catatan

Topik ini hanya berlaku untuk kluster yang menjalankan versi Kubernetes sebelum 1.26.

Kebijakan keamanan pod ACK default

Komponen admission control Pod Security Policy diaktifkan secara default pada kluster ACK standar khusus dan kluster ACK yang dikelola standar yang menjalankan Kubernetes 1.16.6. Kebijakan keamanan pod bernama ack.privileged telah dikonfigurasi. Kebijakan ini mengizinkan semua jenis Pod, sehingga memiliki efek yang sama seperti menonaktifkan komponen admission control Pod Security Policy pada kluster tersebut.

Perintah kebijakan keamanan pod default

$ kubectl get psp ack.privileged
NAME             PRIV   CAPS   SELINUX    RUNASUSER   FSGROUP    SUPGROUP   READONLYROOTFS   VOLUMES
ack.privileged   true   *      RunAsAny   RunAsAny    RunAsAny   RunAsAny   false            *

Perintah detail kebijakan keamanan pod

$ kubectl describe psp ack.privileged
Name:  ack.privileged

Settings:
  Allow Privileged:                       true
  Allow Privilege Escalation:             true
  Default Add Capabilities:               <none>
  Required Drop Capabilities:             <none>
  Allowed Capabilities:                   *
  Allowed Volume Types:                   *
  Allow Host Network:                     true
  Allow Host Ports:                       0-65535
  Allow Host PID:                         true
  Allow Host IPC:                         true
  Read Only Root Filesystem:              false
  SELinux Context Strategy: RunAsAny
    User:                                 <none>
    Role:                                 <none>
    Type:                                 <none>
    Level:                                <none>
  Run As User Strategy: RunAsAny
    Ranges:                               <none>
  FSGroup Strategy: RunAsAny
    Ranges:                               <none>
  Supplemental Groups Strategy: RunAsAny
    Ranges:                               <none>

Bentangkan untuk melihat file YAML lengkap kebijakan keamanan pod beserta cluster role dan cluster role binding-nya

---
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
  name: ack.privileged
  annotations:
    kubernetes.io/description: 'privileged allows full unrestricted access to
      pod features, as if the PodSecurityPolicy controller was not enabled.'
    seccomp.security.alpha.kubernetes.io/allowedProfileNames: '*'
  labels:
    kubernetes.io/cluster-service: "true"
    ack.alicloud.com/component: pod-security-policy
spec:
  privileged: true
  allowPrivilegeEscalation: true
  allowedCapabilities:
  - '*'
  volumes:
  - '*'
  hostNetwork: true
  hostPorts:
  - min: 0
    max: 65535
  hostIPC: true
  hostPID: true
  runAsUser:
    rule: 'RunAsAny'
  seLinux:
    rule: 'RunAsAny'
  supplementalGroups:
    rule: 'RunAsAny'
  fsGroup:
    rule: 'RunAsAny'
  readOnlyRootFilesystem: false

---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: ack:podsecuritypolicy:privileged
  labels:
    kubernetes.io/cluster-service: "true"
    ack.alicloud.com/component: pod-security-policy
rules:
- apiGroups:
  - policy
  resourceNames:
  - ack.privileged
  resources:
  - podsecuritypolicies
  verbs:
  - use

---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: ack:podsecuritypolicy:authenticated
  annotations:
    kubernetes.io/description: 'Allow all authenticated users to create privileged pods.'
  labels:
    kubernetes.io/cluster-service: "true"
    ack.alicloud.com/component: pod-security-policy
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: ack:podsecuritypolicy:privileged
subjects:
  - kind: Group
    apiGroup: rbac.authorization.k8s.io
    name: system:authenticated

Hapus cluster role binding untuk kebijakan keamanan pod ACK default

Peringatan

Sebelum menghapus cluster role binding untuk kebijakan keamanan pod ACK default, Anda harus mengonfigurasi kebijakan keamanan pod kustom beserta binding RBAC-nya. Jika tidak, tidak ada pengguna, controller, atau akun layanan yang dapat membuat atau memperbarui Pod.

Setelah mengonfigurasi kebijakan keamanan pod kustom beserta binding RBAC-nya, Anda dapat menghapus cluster role binding kebijakan keamanan pod ACK default ack.privileged untuk mengaktifkan kebijakan keamanan pod kustom Anda.

Penting

Jangan hapus atau ubah kebijakan keamanan pod bernama ack.privileged atau cluster role bernama ack:podsecuritypolicy:privileged. Kedua resource ini diperlukan agar kluster ACK berjalan dengan baik.

Bentangkan untuk melihat perintah menghapus cluster role binding kebijakan keamanan pod ACK default ack.privileged

$ cat <<EOF | kubectl delete -f -
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: ack:podsecuritypolicy:authenticated
  annotations:
    kubernetes.io/description: 'Allow all authenticated users to create privileged pods.'
  labels:
    kubernetes.io/cluster-service: "true"
    ack.alicloud.com/component: pod-security-policy
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: ack:podsecuritypolicy:privileged
subjects:
  - kind: Group
    apiGroup: rbac.authorization.k8s.io
    name: system:authenticated
EOF

Konfigurasikan atau pulihkan kebijakan keamanan pod ACK default

Bentangkan untuk melihat perintah mengonfigurasi atau memulihkan kebijakan keamanan pod ACK default beserta binding RBAC-nya

cat <<EOF | kubectl apply -f -
---
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
  name: ack.privileged
  annotations:
    kubernetes.io/description: 'privileged allows full unrestricted access to
      pod features, as if the PodSecurityPolicy controller was not enabled.'
    seccomp.security.alpha.kubernetes.io/allowedProfileNames: '*'
  labels:
    kubernetes.io/cluster-service: "true"
    ack.alicloud.com/component: pod-security-policy
spec:
  privileged: true
  allowPrivilegeEscalation: true
  allowedCapabilities:
  - '*'
  volumes:
  - '*'
  hostNetwork: true
  hostPorts:
  - min: 0
    max: 65535
  hostIPC: true
  hostPID: true
  runAsUser:
    rule: 'RunAsAny'
  seLinux:
    rule: 'RunAsAny'
  supplementalGroups:
    rule: 'RunAsAny'
  fsGroup:
    rule: 'RunAsAny'
  readOnlyRootFilesystem: false

---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: ack:podsecuritypolicy:privileged
  labels:
    kubernetes.io/cluster-service: "true"
    ack.alicloud.com/component: pod-security-policy
rules:
- apiGroups:
  - policy
  resourceNames:
  - ack.privileged
  resources:
  - podsecuritypolicies
  verbs:
  - use

---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: ack:podsecuritypolicy:authenticated
  annotations:
    kubernetes.io/description: 'Allow all authenticated users to create privileged pods.'
  labels:
    kubernetes.io/cluster-service: "true"
    ack.alicloud.com/component: pod-security-policy
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: ack:podsecuritypolicy:privileged
subjects:
  - kind: Group
    apiGroup: rbac.authorization.k8s.io
    name: system:authenticated
EOF

FAQ

Pembuatan Pod gagal dengan error "no providers available to validate pod request"

Gejala

Pembuatan Pod gagal. Pesan error berisi no providers available to validate pod request atau unable to validate against any pod security policy.

Solusi

Error ini terjadi karena kebijakan keamanan pod yang telah ditetapkan di kluster secara tidak sengaja dihapus. Anda harus memulihkan resource tersebut secara manual. Untuk informasi selengkapnya, lihat Konfigurasikan atau pulihkan kebijakan keamanan pod ACK default.

Pembuatan Pod gagal dengan error "PodSecurityPolicy: unable to admit pod: pod.spec.securityContext.sysctls[0]: Forbidden: unsafe sysctl"

Gejala

Pembuatan Pod gagal. Pesan error berisi PodSecurityPolicy: unable to admit pod: [pod.spec.securityContext.sysctls[0]: Forbidden: unsafe sysctl "***" is not allowed].

Solusi

Untuk alasan keamanan, kluster secara default tidak mengizinkan pembuatan Pod yang menggunakan parameter sysctl tidak aman. Untuk memberikan izin ini pada aplikasi tertentu, Anda harus membuat kebijakan keamanan pod baru.

Peringatan

Jangan ubah atau hapus resource keamanan inti berikut yang telah ditetapkan. Operasi normal kluster ACK bergantung pada resource ini. Modifikasi tanpa izin dapat menyebabkan fitur kluster menjadi tidak normal, dan perubahan tersebut juga dapat diatur ulang secara otomatis oleh sistem.

  • Kebijakan keamanan pod bernama ack.privileged.

  • Role, ClusterRole, RoleBinding, dan ClusterRoleBinding yang namanya diawali dengan ack:podsecuritypolicy:.

Anda dapat mengonfigurasi parameter sysctl tambahan yang diperlukan dengan membuat kebijakan keamanan pod baru.

  1. Buat file bernama unsafe-sysctl-psp.yaml yang berisi konten berikut.

    Anda dapat menyesuaikan nilai parameter allowedUnsafeSysctls sesuai kebutuhan.
    ---
    apiVersion: policy/v1beta1
    kind: PodSecurityPolicy
    metadata:
      name: psp.allow-unsafe-sysctls
    spec:
      allowedUnsafeSysctls:
      - '*'
      privileged: true
      allowPrivilegeEscalation: true
      allowedCapabilities:
      - '*'
      volumes:
      - '*'
      hostNetwork: true
      hostPorts:
      - min: 0
        max: 65535
      hostIPC: true
      hostPID: true
      runAsUser:
        rule: 'RunAsAny'
      seLinux:
        rule: 'RunAsAny'
      supplementalGroups:
        rule: 'RunAsAny'
      fsGroup:
        rule: 'RunAsAny'
      readOnlyRootFilesystem: false
    
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      name: podsecuritypolicy:allow-unsafe-sysctls
    rules:
    - apiGroups:
      - policy
      resourceNames:
      - psp.allow-unsafe-sysctls
      resources:
      - podsecuritypolicies
      verbs:
      - use
    
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      name: podsecuritypolicy:allow-unsafe-sysctls:authenticated
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: podsecuritypolicy:allow-unsafe-sysctls
    subjects:
      - kind: Group
        apiGroup: rbac.authorization.k8s.io
        name: system:authenticated
    
  2. Buat resource di kluster.

    kubectl create -f unsafe-sysctl-psp.yaml

    Output yang diharapkan:

    podsecuritypolicy.policy/psp.allow-unsafe-sysctls created
    clusterrole.rbac.authorization.k8s.io/podsecuritypolicy:allow-unsafe-sysctls created
    clusterrolebinding.rbac.authorization.k8s.io/podsecuritypolicy:allow-unsafe-sysctls:authenticated created
  3. Sesuaikan parameter kubelet untuk kelompok node agar mengizinkan parameter sysctl tidak aman. Untuk informasi selengkapnya, lihat Parameter kubelet kustom yang didukung.

  4. Deploy Pod uji yang menggunakan parameter sysctl tidak aman.

    Anda dapat menyesuaikan parameter sysctls sesuai kebutuhan. Jika kubelet hanya pada beberapa node di kluster—misalnya, node dalam kelompok node tertentu—dikonfigurasi untuk mengizinkan sysctl tidak aman, Anda juga harus menambahkan nodeSelector ke Pod agar Pod dijadwalkan ke node yang dituju.
    cat <<EOF | kubectl apply -f -
    apiVersion: v1
    kind: Pod
    metadata:
      name: sysctl-example
    spec:
    #  nodeSelector:
    #    alibabacloud.com/nodepool-id: npd912756***  # Ganti dengan ID kelompok node target
      securityContext:
        sysctls:
        - name: net.ipv4.tcp_syncookies
          value: "1"
        - name: net.core.somaxconn
          value: "1024"
        - name: net.ipv4.tcp_max_syn_backlog
          value: "65536"
      containers:
      - name: test
        image: nginx
    EOF

    Output yang diharapkan:

    Jika event SysctlForbidden terjadi saat Pod sedang berjalan, kubelet pada node tempat Pod tersebut berjalan belum dikonfigurasi untuk mengizinkan parameter sysctl tidak aman. Periksa dan sesuaikan nodeSelector Pod untuk memastikan Pod dijadwalkan ke node yang parameter kubelet-nya telah dikonfigurasi dengan benar.

    pod/sysctl-example created