从命令行

时间:2018-02-03 18:45:00

标签: kubernetes kubectl ibm-cloud-private

在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命令。

3 个答案:

答案 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