diff --git a/cluster/gce/gci/configure-kubeapiserver.sh b/cluster/gce/gci/configure-kubeapiserver.sh index eab6932e6d2..603f00b8ba0 100644 --- a/cluster/gce/gci/configure-kubeapiserver.sh +++ b/cluster/gce/gci/configure-kubeapiserver.sh @@ -62,8 +62,8 @@ function configure-etcd-params { # INSECURE_PORT_MAPPING function start-kube-apiserver { echo "Start kubernetes api-server" - prepare-log-file "${KUBE_API_SERVER_LOG_PATH:-/var/log/kube-apiserver.log}" - prepare-log-file "${KUBE_API_SERVER_AUDIT_LOG_PATH:-/var/log/kube-apiserver-audit.log}" + prepare-log-file "${KUBE_API_SERVER_LOG_PATH:-/var/log/kube-apiserver.log}" "${KUBE_API_SERVER_RUNASUSER:-0}" + prepare-log-file "${KUBE_API_SERVER_AUDIT_LOG_PATH:-/var/log/kube-apiserver-audit.log}" "${KUBE_API_SERVER_RUNASUSER:-0}" # Calculate variables and assemble the command line. local params="${API_SERVER_TEST_LOG_LEVEL:-"--v=2"} ${APISERVER_TEST_ARGS:-} ${CLOUD_CONFIG_OPT}" @@ -113,7 +113,11 @@ function start-kube-apiserver { if [[ -n "${SERVICEACCOUNT_CERT_PATH:-}" ]]; then params+=" --service-account-key-file=${SERVICEACCOUNT_CERT_PATH}" fi - params+=" --token-auth-file=/etc/srv/kubernetes/known_tokens.csv" + local known_tokens_file='/etc/srv/kubernetes/known_tokens.csv' + if [[ -f "${known_tokens_file}" ]]; then + chown "${KUBE_API_SERVER_RUNASUSER:-0}":"${KUBE_API_SERVER_RUNASGROUP:-0}" "${known_tokens_file}" + fi + params+=" --token-auth-file=${known_tokens_file}" if [[ -n "${KUBE_APISERVER_REQUEST_TIMEOUT_SEC:-}" ]]; then params+=" --request-timeout=${KUBE_APISERVER_REQUEST_TIMEOUT_SEC}s" @@ -405,6 +409,27 @@ function start-kube-apiserver { sed -i -e "s@{{konnectivity_socket_volume}}@${default_konnectivity_socket_vol}@g" "${src_file}" sed -i -e "s@{{healthcheck_ip}}@${healthcheck_ip}@g" "${src_file}" + if [[ -n "${KUBE_API_SERVER_RUNASUSER:-}" && -n "${KUBE_API_SERVER_RUNASGROUP:-}" && -n "${KUBE_PKI_READERS_GROUP:-}" ]]; then + sed -i -e "s@{{runAsUser}}@\"runAsUser\": ${KUBE_API_SERVER_RUNASUSER},@g" "${src_file}" + sed -i -e "s@{{runAsGroup}}@\"runAsGroup\": ${KUBE_API_SERVER_RUNASGROUP},@g" "${src_file}" + sed -i -e "s@{{capabilities}}@\"capabilities\": { \"drop\": [\"all\"], \"add\": [\"NET_BIND_SERVICE\"]},@g" "${src_file}" + sed -i -e "s@{{allowPrivilegeEscalation}}@\"allowPrivilegeEscalation\": false,@g" "${src_file}" + local supplementalGroups="${KUBE_PKI_READERS_GROUP}" + if [[ -n "${KMS_PLUGIN_SOCKET_WRITER_GROUP:-}" ]]; then + supplementalGroups+=",${KMS_PLUGIN_SOCKET_WRITER_GROUP}" + fi + if [[ -n "${KONNECTIVITY_SERVER_SOCKET_WRITER_GROUP:-}" ]]; then + supplementalGroups+=",${KONNECTIVITY_SERVER_SOCKET_WRITER_GROUP}" + fi + sed -i -e "s@{{supplementalGroups}}@\"supplementalGroups\": [ ${supplementalGroups} ],@g" "${src_file}" + else + sed -i -e "s@{{runAsUser}}@@g" "${src_file}" + sed -i -e "s@{{runAsGroup}}@@g" "${src_file}" + sed -i -e "s@{{capabilities}}@@g" "${src_file}" + sed -i -e "s@{{allowPrivilegeEscalation}}@@g" "${src_file}" + sed -i -e "s@{{supplementalGroups}}@@g" "${src_file}" + fi + cp "${src_file}" "${ETC_MANIFESTS:-/etc/kubernetes/manifests}" } diff --git a/cluster/gce/manifests/kube-apiserver.manifest b/cluster/gce/manifests/kube-apiserver.manifest index 092fda75740..c3f7b82e30f 100644 --- a/cluster/gce/manifests/kube-apiserver.manifest +++ b/cluster/gce/manifests/kube-apiserver.manifest @@ -11,6 +11,11 @@ }, "spec":{ "securityContext": { + {{runAsUser}} + {{runAsGroup}} + {{capabilities}} + {{allowPrivilegeEscalation}} + {{supplementalGroups}} "seccompProfile": { "type": "RuntimeDefault" }