手动连接你的 Kubernetes 集群
Kubernetes (K8s)是我最喜欢的部署平台之一。我花了一个周末的时间在CI管道上连接集群。
先决条件
在我们开始之前,我们需要设置一些工具,比如在GKE中注册。许多其他工具只要支持k8,也可以做同样的事情。你可以随意使用其他选项,但要确保在你遵循这篇文章的时候调整你的设置。
撰写kubeconfig配置文件
让我们从设置k8集群开始。如果你已经有了,可以跳过这个。
gcloud container clusters create cluster-1 --zone europe-west3-a
创建一个临时文件夹来存储 kube config文件和任何其他内容。
# 环境变量
SERVICE_ACCOUNT_NAME=deployer
NAMESPACE=default
TARGET_FOLDER="/tmp/kube"
KUBECFG_FILE_NAME="${TARGET_FOLDER}/k8s-${SERVICE_ACCOUNT_NAME}-${NAMESPACE}-conf"
# 创建临时文件夹
mkdir -p "/tmp/kube"
创建服务帐户并将其命名为部署者,最好限制只需要通过的权限。
kubectl create sa deployer --namespace default
kubectl create clusterrolebinding deployer --clusterrole cluster-admin --serviceaccount default:deployer
我们想要属于服务帐户的秘密,这个秘密带给我们获得证书和令牌。有个命令帮助我们。
SECRET_NAME=$(kubectl get sa deployer --namespace=default -o json | jq -r .secrets[].name)
# 将证书放入临时文件夹
kubectl get secret --namespace default "${SECRET_NAME}" -o json | jq /
-r '.data["ca.crt"]' | base64 --decode > "tmp/kube/ca.crt"
# 提取并声明用户令牌
USER_TOKEN=$(kubectl get secret --namespace default "${SECRET_NAME}" -o json | jq -r '.data["token"]' | base64 --decode)
然后我们可以使用上面的信息设置 kube config 配置文件,如证书、令牌等。最终我们应该有一个具有相应值的 kube config 配置文件,以允许我们的代理 docker 容器连接到 K8s。
CONTEXT=$(kubectl config current-context)
CLUSTER_NAME=$(kubectl config get-contexts "${CONTEXT}" | awk '{print $3}' | tail -n 1)
ENDPOINT=$(kubectl config view /
-o jsonpath="{.clusters[?(@.name == /"${CLUSTER_NAME}/")].cluster.server}")
# 在 kube config 配置中设置集群
kubectl config set-cluster "${CLUSTER_NAME}" /
--kubeconfig="${KUBECFG_FILE_NAME}" /
--server="${ENDPOINT}" /
--certificate-authority="${TARGET_FOLDER}/ca.crt" /
--embed-certs=true
# 在 kube config中设置令牌凭据
kubectl config set-credentials /
deployer-default-${CLUSTER_NAME}" /
--kubeconfig=/tmp/kube/kube-conf /
--token="${USER_TOKEN}"
# 在 kube config 中设置上下文
kubectl config set-context /
"deployer-default-${CLUSTER_NAME}" /
--kubeconfig=/tmp/kube/kube-conf /
--cluster="${CLUSTER_NAME}" /
--user="deployer-default-${CLUSTER_NAME}" /
--namespace=default
# 在 kube config 中使用上下文
kubectl config use-context "deployer-default-${CLUSTER_NAME}" /
--kubeconfig=/tmp/kube/kube-conf
我们可以在此路径中找到 kube 配置文件:/tmp/kube/。
# kube config 配置文件示例
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: BASE64_CA_CERT
server: https://YOUR_API_IP
name: k8s
contexts:
- context:
cluster: k8s
user: k8s-deployer
name: k8s
current-context: k8s
kind: Config
preferences: {}
users:
- name: k8s-deployer
user:
token: BASE64_TOKEN
最后但同样重要的是,我们必须为服务帐户授予基于角色的访问控制权限并创建 permissions-template.yaml
# permissions-template.yaml
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: my_account-clusterrolebinding
subjects:
- kind: ServiceAccount
name: my_account
namespace: my_namespace
roleRef:
kind: ClusterRole
name: cluster-admin
apiGroup: ""
申请许可的时间
# 调整模板并为服务帐户创建权限文件
sed -e "s|my_account|deployer|g" -e "s|my_namespace|default|g" /
permissions-template.yaml > permissions_deployer.yaml
# 申请许可
kubectl apply -f permissions_deployer.yaml
现在我们可以简单地在任何实例上使用这个 kube config 配置文件并连接到我们的集群。 您可以使用此命令测试连接
KUBECONFIG=/tmp/kube/kube-conf kubectl get pods
结论
OK,就这样。 是时候使用我们的 Kubernetes 集群即插即用了。
The post 手动连接你的 Kubernetes 集群 first appeared on Linux迷.
共有 0 条评论