首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在kubeadm集群上配置PodSecurityPolicy

在kubeadm集群上配置PodSecurityPolicy
EN

Stack Overflow用户
提问于 2018-04-15 19:15:35
回答 2查看 2K关注 0票数 6

我尝试用kubeadm在一个安装在ubuntu16.04上的1.10.1集群上设置PodSecurityPolicy,并遵循了https://kubernetes.io/docs/concepts/policy/pod-security-policy/的说明

因此,我修改了/etc/kubernetes/manifests/kube-apiserver.yaml主服务器上的apiserver清单,将",PodSecurityPolicy"添加到--admission-control arg中。

当我这样做并运行api-server时,没有列出api-server,很明显,当我获得kube-system命名空间中所有其他豆荚的列表时,我已经成功地命中了apiserver的一个运行实例。

我可以看到,PodSecurityPolicy接纳控制器已经启动了一个新的码头容器,它显然是在为kubectl请求服务。

当我使用journalctl -u kubelet检查kubelet日志时,我可以看到

Apr 15 18:14:23 pmcgrath-k8s-3-master kubelet[993]: E0415 18:14:23.087361 993 kubelet.go:1617] Failed creating a mirror pod for "kube-apiserver-pmcgrath-k8s-3-master_kube-system(46dbb13cd345f9fbb9e18e2229e2e dd1)": pods "kube-apiserver-pmcgrath-k8s-3-master" is forbidden: unable to validate against any pod security policy: []

我已经添加了一个特权PSP,并创建了一个集群角色和绑定,并确认PSP正在工作。

只是不确定apiserver kubelet为什么会出现此错误,因此不会出现在pod列表中,因此会认为kubelet创建了这个吊舱,并且不确定是否必须为apiserver、控制器管理器、调度程序和kube-dns创建一个角色绑定。

没有说明如何处理此问题的文档,我猜想这是一种“鸡与蛋”的情况,在我可以对api服务器的接纳控制arg进行变异之前,我必须引导集群,添加一些PSPs、ClusterRoles和ClusterRolebindings。

有没有人有同样的问题,或者在这方面有任何指点?

谢谢帕特

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-09-21 10:12:59

我写了一篇关于我是如何发现这件事的博文,简短的回答是

  • 在启用PodSecurityPolicy接纳控制器的主运行kubeadm init上
  • 添加一些带有RBAC配置的pod安全策略--足够允许CNI和DNS等启动。
    • 没有这一点,CNI守护集就不会启动。

  • 通过kubeadm连接完成集群添加节点的配置
  • 当您将更多的工作负载添加到集群时,检查是否需要为同一集群添加额外的pod安全策略和RBAC配置。

请参阅https://pmcgrath.net/using-pod-security-policies-with-kubeadm

票数 3
EN

Stack Overflow用户

发布于 2018-04-18 15:35:14

看起来,我们不能仅仅将PodSecurityPolicy添加到插件列表的末尾。例如,引发集群的脚本从选项列表(SecurityContextDenyPodSecurityPolicyNodeRestriction)中只选择一个security_admission,因此它们在一起使用时可能会引起冲突。

函数create_psp_policy是在start_apiserver之后调用的,因此我们假设您可以在更改api-server参数之后创建策略、角色和绑定,但是在所有必需的对象就位之后,一些pods就变成了Running

请查看文件https://github.com/kubernetes/kubernetes/blob/master/hack/local-up-cluster.sh

从412行开始:

代码语言:javascript
复制
function start_apiserver {
    security_admission=""
    if [[ -n "${DENY_SECURITY_CONTEXT_ADMISSION}" ]]; then
      security_admission=",SecurityContextDeny"
    fi
    if [[ -n "${PSP_ADMISSION}" ]]; then
      security_admission=",PodSecurityPolicy"
    fi
    if [[ -n "${NODE_ADMISSION}" ]]; then
      security_admission=",NodeRestriction"
    fi
    if [ "${ENABLE_POD_PRIORITY_PREEMPTION}" == true ]; then
      security_admission=",Priority"
      if [[ -n "${RUNTIME_CONFIG}" ]]; then
          RUNTIME_CONFIG+=","
      fi
      RUNTIME_CONFIG+="scheduling.k8s.io/v1alpha1=true"
    fi
    # Admission Controllers to invoke prior to persisting objects in cluster
    #
    # The order defined here dose not matter.

    ENABLE_ADMISSION_PLUGINS=Initializers,LimitRanger,ServiceAccount${security_admission},DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,PodPreset,StorageObjectInUseProtection

    <skipped>
}
<skipped>

从第864行开始:

代码语言:javascript
复制
function create_psp_policy {
    echo "Create podsecuritypolicy policies for RBAC."
    ${KUBECTL} --kubeconfig="${CERT_DIR}/admin.kubeconfig" create -f ${KUBE_ROOT}/examples/podsecuritypolicy/rbac/policies.yaml
    ${KUBECTL} --kubeconfig="${CERT_DIR}/admin.kubeconfig" create -f ${KUBE_ROOT}/examples/podsecuritypolicy/rbac/roles.yaml
    ${KUBECTL} --kubeconfig="${CERT_DIR}/admin.kubeconfig" create -f ${KUBE_ROOT}/examples/podsecuritypolicy/rbac/bindings.yaml
}

<skipped>

从第986行开始

代码语言:javascript
复制
echo "Starting services now!"
if [[ "${START_MODE}" != "kubeletonly" ]]; then
  start_etcd
  set_service_accounts
  start_apiserver
  start_controller_manager
  if [[ "${EXTERNAL_CLOUD_PROVIDER:-}" == "true" ]]; then
    start_cloud_controller_manager
  fi
  start_kubeproxy
  start_kubedns
  start_kubedashboard
fi

if [[ "${START_MODE}" != "nokubelet" ]]; then
  ## TODO remove this check if/when kubelet is supported on darwin
  # Detect the OS name/arch and display appropriate error.
    case "$(uname -s)" in
      Darwin)
        warning "kubelet is not currently supported in darwin, kubelet aborted."
        KUBELET_LOG=""
        ;;
      Linux)
        start_kubelet
        ;;
      *)
        warning "Unsupported host OS.  Must be Linux or Mac OS X, kubelet aborted."
        ;;
    esac
fi

if [[ -n "${PSP_ADMISSION}" && "${AUTHORIZATION_MODE}" = *RBAC* ]]; then
  create_psp_policy
fi

if [[ "$DEFAULT_STORAGE_CLASS" = "true" ]]; then
  create_storage_class
fi

print_success

<skipped>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49845823

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档