在IBM Cloud Private EE中,我需要转到Web UI User > Configure client
,复制kubectl
config命令,然后在我的客户端计算机上运行这5个命令。
我在5个虚拟机上部署了IBM Cloud private EE,并且可以访问主节点。我想知道是否有办法直接从docker容器捕获这些kubectl config
命令,而无需转到Web UI。
例如:我不想从谷歌下载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 $3}' /etc/hosts)
do
scp kubectl $host:/bin
done
其中 - 192.168.142
是我的VM来宾的子网。
但是,我无法弄清楚如何获取Configure Client
命令而无需转到Web UI。我需要这个来自动化客户端kubectl
命令,以便通过简单的脚本为我的环境准备好kubectl
命令。
答案 0 :(得分: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
在 Kubernetes, IBM Cloud Private, and Vagrant, oh my! 中查看&#34; Tim Pouyer&#34;的详情。
答案 1 :(得分:0)
@VonC提供了有用的提示。这是获取服务帐户令牌的方式。
从正在运行的容器中获取令牌 - 来自此link。
的提示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群集名称,主节点和默认用户名的名称。唯一缺失的链接是令牌。请注意,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
答案 2 :(得分: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