我无法从外部设置对kubernetes集群的访问权限。这就是我想要实现的目标: - 能够从外部(从非“主”甚至从任何远程的节点)访问kube集群,以便能够仅在特定命名空间上执行kube操作。
我的逻辑是做以下事情:
创建新的命名空间(让我们称之为testns)
创建服务帐户(testns-account)
创建角色,为在testns命名空间内创建任何类型的kube资源提供访问权限
创建角色绑定,将服务帐户与角色绑定
从服务帐户生成令牌
现在,我的逻辑是我需要令牌+ api服务器URL来访问具有有限“权限”的kube集群,但这似乎不够。
实现这一目标最简单的方法是什么?首先,我可以访问kubectl只是为了验证命名空间的有限权限,但最终,我会有一些客户端代码进行访问并使用这些有限的权限创建kube资源。
您需要从令牌生成kubeconfig。
!/ usr / bin / env bash
set -e
if [[ $# == 0 ]]; then
echo "Usage: $0 SERVICEACCOUNT [kubectl options]" >&2
echo "" >&2
echo "This script creates a kubeconfig to access the apiserver with the specified serviceaccount and outputs it to stdout." >&2
exit 1
fi
function _kubectl() {
kubectl $@ $kubectl_options
}
serviceaccount="$1"
kubectl_options="${@:2}"
if ! secret="$(_kubectl get serviceaccount "$serviceaccount" -o 'jsonpath={.secrets[0].name}' 2>/dev/null)"; then
echo "serviceaccounts "$serviceaccount" not found." >&2
exit 2
fi
if [[ -z "$secret" ]]; then
echo "serviceaccounts "$serviceaccount" doesn't have a serviceaccount token." >&2
exit 2
fi
context="$(_kubectl config current-context)"
cluster="$(_kubectl config view -o "jsonpath={.contexts[?(@.name==\"$context")].context.cluster}")"
server="$(_kubectl config view -o "jsonpath={.clusters[?(@.name==\"$cluster")].cluster.server}")"
ca_crt_data="$(_kubectl get secret "$secret" -o "jsonpath={.data.ca.crt}" | openssl enc -d -base64 -A)"
namespace="$(_kubectl get secret "$secret" -o "jsonpath={.data.namespace}" | openssl enc -d -base64 -A)"
token="$(_kubectl get secret "$secret" -o "jsonpath={.data.token}" | openssl enc -d -base64 -A)"
export KUBECONFIG="$(mktemp)"
kubectl config set-credentials "$serviceaccount" --token="$token" >/dev/null
ca_crt="$(mktemp)"; echo "$ca_crt_data" > $ca_crt
kubectl config set-cluster "$cluster" --server="$server" --certificate-authority="$ca_crt" --embed-certs >/dev/null
kubectl config set-context "$context" --cluster="$cluster" --namespace="$namespace" --user="$serviceaccount" >/dev/null
kubectl config use-context "$context" >/dev/null
cat "$KUBECONFIG"
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。