从命令行配置客户端命令

Configure Client commands from command line

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

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

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

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 }' /etc/hosts)
do
   scp kubectl $host:/bin
done

其中 - 192.168.142 是我的虚拟机来宾的子网。

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

您应该使用 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

查看更多信息“Kubernetes, IBM Cloud Private, and Vagrant, oh my!", from Tim Pouyer

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

从 运行 容器获取令牌 - 来自此 link 的提示。

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

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

所以使用脚本。

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
# 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 }'`

# 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