从命令行配置客户端命令
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
在 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