Todos os produtos
Search
Central de documentação

Container Service for Kubernetes:Container Service for Kubernetes:[Deprecated] Use pod security policies

Última atualização: Sep 12, 2026
Aviso

Aplica-se apenas a clusters ACK com versões do Kubernetes anteriores à 1,26. Para clusters com Kubernetes 1.25 ou superior, use o Pod Security Admission. Para migrar do PSP, consulte Migrar do PodSecurityPolicy para o controlador de admissão PodSecurity integrado.

O controlador de admissão Pod Security Policy (PSP) valida solicitações de criação e atualização de pods conforme as regras definidas. Se uma solicitação não estiver em conformidade, o sistema a rejeita e retorna um erro. Este tópico descreve como usar políticas de segurança de pod no Container Service for Kubernetes (ACK).

Pré-requisitos

Verifique se:

Política de segurança de pod padrão do ACK

Clusters dedicados e gerenciados padrão do ACK com Kubernetes 1.16.6 habilitam o controlador de admissão PSP por padrão. A política ack.privileged vem pré-configurada.

A política ack.privileged concede acesso total e irrestrito a todos os usuários autenticados, equivalente a ter o controlador de admissão PSP desativado. As cargas de trabalho funcionam imediatamente; substitua essa base ao aplicar políticas mais rigorosas.

Inspecione a política padrão:

kubectl get psp ack.privileged

Saída esperada:

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

Para obter todos os detalhes:

kubectl describe psp ack.privileged

Saída esperada:

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>

Visualize o YAML completo da política padrão, do ClusterRole e do 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

Aplicar uma política de segurança de pod personalizada

Para aplicar uma política mais restritiva, remova o ClusterRoleBinding padrão. Assim, a ack.privileged deixará de se aplicar a todos os usuários autenticados. Execute esse processo em duas etapas para evitar o bloqueio total da criação de pods.

Importante

Nunca exclua ou modifique a política ack.privileged ou o ClusterRole ack:podsecuritypolicy:privileged. Esses recursos são essenciais para o funcionamento do cluster ACK. Remova apenas o ClusterRoleBinding (ack:podsecuritypolicy:authenticated).

Etapa 1: Crie sua política personalizada e o vínculo RBAC

Crie e vincule uma política de segurança de pod personalizada antes de remover o ClusterRoleBinding padrão. Caso contrário, nenhum usuário, controlador ou conta de service conseguirá criar ou atualizar pods.

Etapa 2: Remova o ClusterRoleBinding padrão

Após configurar a política personalizada e o respectivo vínculo RBAC, remova o ClusterRoleBinding padrão:

Visualize o comando para excluir o ClusterRoleBinding padrão:

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

Restaurar a política de segurança de pod padrão

Se a política padrão ack.privileged ou seu ClusterRoleBinding for excluído acidentalmente, restaure-o.

Visualize o comando para restaurar a política padrão e seu vínculo RBAC:

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

Perguntas frequentes

Falha na criação de pod com "no providers available to validate pod request"

O erro completo é no providers available to validate pod request ou unable to validate against any pod security policy. Isso ocorre quando a política ack.privileged é excluída acidentalmente.

Consulte Restaurar a política de segurança de pod padrão.

Falha na criação de pod com "Forbidden: unsafe sysctl"

O erro completo apresenta o seguinte formato:

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

Os clusters não permitem parâmetros sysctl inseguros por padrão. Para conceder essa permissão a uma carga de trabalho específica, crie uma nova política de segurança de pod. Não modifique a política predefinida ack.privileged nem recursos cujos nomes comecem com ack:podsecuritypolicy:.

Aviso

Não modifique nem exclua esses recursos predefinidos. O cluster ACK depende deles para operar normalmente. Alterações não autorizadas podem quebrar funcionalidades do cluster ou acionar redefinições automáticas:

  • A política de segurança de pod chamada ack.privileged

  • Roles, ClusterRoles, RoleBindings e ClusterRoleBindings cujos nomes começam com ack:podsecuritypolicy:

Etapa 1: Crie uma política de segurança de pod que permita parâmetros sysctl inseguros.

Crie o arquivo unsafe-sysctl-psp.yaml com o conteúdo abaixo. Ajuste o campo allowedUnsafeSysctls conforme necessário.

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

Etapa 2: Aplique a política.

kubectl create -f unsafe-sysctl-psp.yaml

Saída esperada:

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

Etapa 3: Configure o pool de nós para permitir parâmetros sysctl inseguros.

Personalize os parâmetros do kubelet para o pool de nós da carga de trabalho. Consulte Parâmetros personalizados suportados do kubelet.

Etapa 4: Verifique com um pod de teste.

Implante um pod de teste com parâmetros sysctl inseguros. Se o kubelet estiver configurado apenas em nós específicos (por exemplo, em um pool de nós), adicione um nodeSelector para agendar o pod nesses nós.

cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
  name: sysctl-example
spec:
#  nodeSelector:
#    alibabacloud.com/nodepool-id: npd912756***  # Replace with the target node pool ID
  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

Saída esperada:

pod/sysctl-example created

Um evento SysctlForbidden indica que o kubelet no nó agendado não permite parâmetros sysctl inseguros. Ajuste o nodeSelector do pod para direcioná-lo a um nó com a configuração correta do kubelet.

Referências