2

在 IBM Cloud Private EE 中,我需要转到 Web UI User > Configure client,复制kubectl配置命令,然后在我的客户端机器上运行这 5 个命令。

我在 5 个 VM 上部署了 IBM Cloud 私有 EE,并且可以访问主节点。我想知道是否有一种方法可以kubectl config直接从 docker 容器中捕获这些命令,而无需转到 Web UI。

例如:我不想kubectl从 google 下载客户端(因为我只想使用kubectlICP 容器中的相同版本),我使用以下命令从容器本身获取它。

docker run --rm -v $(pwd):/data -e LICENSE=accept \
   ibmcom/icp-inception:2.1.0.1-ee \
   cp -r /usr/local/bin/kubectl /data

然后,我将其复制到所有 VM 来宾,以便我可以kubectl从任何来宾访问。

chmod +x kubectl
for host in $(awk '/192.168.142/ {print $3}' /etc/hosts)
do
   scp kubectl $host:/bin
done

其中 -192.168.142是我的 VM 来宾的子网。

但是,我不知道如何在Configure Client不访问 Web UI 的情况下获取命令。我需要它来自动化客户端kubectl命令,以便我的环境可以kubectl通过简单的脚本执行命令。

4

3 回答 3

1

你应该使用Vagrant来自动化这些步骤。

例如,IBM/deploy-ibm-cloud-private/Vagrantfile有这个部分:

install_kubectl = <<SCRIPT
echo "Pulling #{image_repo}/kubernetes:v#{k8s_version}..."
sudo docker run -e LICENSE=#{license} --net=host -v /usr/local/bin:/data #{image_repo}/kubernetes:v#{k8s_version} cp /kubectl /data &> /dev/null
kubectl config set-credentials icpadmin --username=admin --password=admin &> /dev/null
kubectl config set-cluster icp --server=http://127.0.0.1:8888 --insecure-skip-tls-verify=true &> /dev/null
kubectl config set-context icp --cluster=icp --user=admin  --namespace=default &> /dev/null
kubectl config use-context icp &> /dev/null
SCRIPT

请参阅Tim Pouyer的“ Kubernetes、IBM Cloud Private 和 Vagrant,哦,我的! ”了解更多信息。

于 2018-02-03T19:50:04.007 回答
0

@VonC 提供了有用的提示。这就是获取服务帐户令牌的方式。

从正在运行的容器中获取令牌 - 来自此链接的提示。

RUNNIGCONTAINER=$(docker ps | grep k8s_cloudiam-apikeys_auth | awk '{print $1}')
TOKEN=$(docker exec -t $RUNNIGCONTAINER cat /var/run/secrets/kubernetes.io/serviceaccount/token)

我已经知道 IBM Cloud Private 集群名称、主节点名称和默认用户名。唯一缺少的链接是令牌。请注意,蒂姆使用的脚本使用密码,唯一的区别是 - 我想使用令牌而不是密码。

所以使用脚本。

kubectl config set-cluster ${CLUSTERNAME}.icp --server=https://$MASTERNODE:8001 --insecure-skip-tls-verify=true
kubectl config set-context ${CLUSTERNAME}.icp-context --cluster=${CLUSTERNAME}.icp
kubectl config set-credentials admin --token=$TOKEN
kubectl config set-context ${CLUSTERNAME}.icp-context --user=$DEFAULTUSERNAME --namespace=default
kubectl config use-context ${CLUSTERNAME}.icp-context
于 2018-02-03T23:30:54.097 回答
0
# get token
icp_auth_token=`curl -s -k -H "Content-Type: application/x-www-form-urlencoded;charset=UTF-8" \
    -d "grant_type=password&username=${myuser}&password=${mypass}&scope=openid" \
    https://${icp_server}:8443/idprovider/v1/auth/identitytoken --insecure | \
    sed 's/{//g;s/}//g;s/\"//g' | \
    awk -F ':' '{print $7}'`

# setup context
kubectl config set-cluster ${icp_server} --server=https://${icp_server}:8001 --insecure-skip-tls-verify=true 
kubectl config set-credentials ${icp_server}-user --token=${icp_auth_token}
kubectl config set-context ${icp_server}-context --cluster=${icp_server} --user=${icp_server}-user 
kubectl config use-context ${icp_server}-context
于 2018-05-01T02:08:08.327 回答