All Products
Search
Document Center

Container Service for Kubernetes:Container Service for Kubernetes:[Deprecated] Gunakan kebijakan keamanan pod

Last Updated:Jun 24, 2026
Peringatan

Hanya berlaku untuk kluster ACK yang menjalankan Kubernetes versi sebelum 1.26. Untuk kluster yang menjalankan Kubernetes 1.25 atau lebih baru, gunakan Pod Security Admission sebagai gantinya. Untuk melakukan migrasi dari PSP, lihat Migrate from PodSecurityPolicy to the built-in PodSecurity admission controller.

Kontroler admission Pod Security Policy (PSP) memvalidasi permintaan pembuatan dan pembaruan Pod terhadap aturan yang Anda tentukan. Jika permintaan tidak sesuai dengan aturan tersebut, sistem akan menolaknya dan mengembalikan error. Topik ini menjelaskan cara menggunakan kebijakan keamanan pod di Container Service for Kubernetes (ACK).

Prasyarat

Pastikan Anda telah:

Kebijakan keamanan pod default ACK

Kluster dedicated dan managed ACK standar yang menjalankan Kubernetes 1.16.6 mengaktifkan kontroler admission PSP secara default. Kebijakan bernama ack.privileged telah dikonfigurasi sebelumnya.

ack.privileged memberikan semua pengguna terautentikasi akses penuh tanpa batasan — setara dengan menonaktifkan kontroler admission PSP. Workload dapat berjalan langsung; gantilah garis dasar ini saat menerapkan kebijakan yang lebih ketat.

Periksa kebijakan default:

kubectl get psp ack.privileged

Output yang diharapkan:

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

Untuk detail lengkap:

kubectl describe psp ack.privileged

Output yang diharapkan:

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>

Lihat YAML lengkap untuk kebijakan default, ClusterRole, dan ClusterRoleBinding

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

Terapkan kebijakan keamanan pod kustom

Untuk menerapkan kebijakan yang lebih ketat, hapus ClusterRoleBinding default sehingga ack.privileged tidak lagi berlaku untuk semua pengguna terautentikasi. Lakukan dalam dua tahap agar tidak mengunci seluruh pembuatan Pod.

Penting

Jangan pernah menghapus atau mengubah kebijakan ack.privileged atau ClusterRole ack:podsecuritypolicy:privileged. Sumber daya ini diperlukan agar kluster ACK berfungsi dengan baik. Hanya ClusterRoleBinding (ack:podsecuritypolicy:authenticated) yang boleh dihapus.

Tahap 1: Buat kebijakan kustom dan binding RBAC Anda

Buat dan bind kebijakan keamanan pod kustom sebelum menghapus ClusterRoleBinding default. Jika tidak, tidak ada pengguna, controller, atau akun layanan yang dapat membuat atau memperbarui Pod.

Tahap 2: Hapus ClusterRoleBinding default

Setelah kebijakan kustom dan binding RBAC-nya diterapkan, hapus ClusterRoleBinding default:

Lihat perintah untuk menghapus ClusterRoleBinding default

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

Pulihkan kebijakan keamanan pod default

Jika kebijakan default ack.privileged atau ClusterRoleBinding-nya tidak sengaja dihapus, pulihkan kembali.

Lihat perintah untuk memulihkan kebijakan default dan 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 pesan "no providers available to validate pod request"

Pesan error lengkapnya adalah no providers available to validate pod request atau unable to validate against any pod security policy. Hal ini terjadi ketika ack.privileged tidak sengaja dihapus.

Lihat Pulihkan kebijakan keamanan pod default.

Pembuatan pod gagal dengan pesan "Forbidden: unsafe sysctl"

Pesan error lengkapnya seperti berikut:

PodSecurityPolicy: unable to admit pod: [pod.spec.securityContext.sysctls[0]: Forbidden: unsafe sysctl "***" is not allowed]

Kluster tidak mengizinkan parameter sysctl yang tidak aman secara default. Untuk memberikan izin ini pada workload tertentu, buat kebijakan keamanan pod baru — jangan ubah kebijakan preset ack.privileged atau sumber daya apa pun yang namanya diawali dengan ack:podsecuritypolicy:.

Peringatan

Jangan ubah atau hapus sumber daya preset ini. Kluster ACK bergantung pada sumber daya ini untuk beroperasi secara normal. Perubahan yang tidak sah dapat merusak fitur kluster atau memicu reset otomatis:

  • Kebijakan keamanan pod bernama ack.privileged

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

Langkah 1: Buat kebijakan keamanan pod yang mengizinkan parameter sysctl tidak aman.

Buat file unsafe-sysctl-psp.yaml dengan konten berikut. Sesuaikan nilai 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

Langkah 2: Terapkan kebijakan tersebut.

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

Langkah 3: Konfigurasikan kelompok node untuk mengizinkan parameter sysctl tidak aman.

Sesuaikan parameter kubelet untuk kelompok node tempat workload dijalankan. Lihat Supported custom kubelet parameters.

Langkah 4: Verifikasi dengan Pod uji.

Deploy pod uji dengan parameter sysctl tidak aman. Jika kubelet hanya dikonfigurasi pada node tertentu (misalnya, pada kelompok node), tambahkan nodeSelector untuk menjadwalkan pod ke node tersebut.

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:

pod/sysctl-example created

Event SysctlForbidden berarti kubelet pada node yang dijadwalkan tidak mengizinkan parameter sysctl tidak aman. Sesuaikan nodeSelector pod untuk menargetkan node dengan konfigurasi kubelet yang sesuai.

Referensi