手动连接你的 Kubernetes 集群就这么简单

2021-11-05 00:00:00 集群 设置 令牌 帐户 配置文件


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 集群即插即用了。
来自:Linux迷
链接:https://www.linuxmi.com/lianjie-kubernetes-cluster.html


相关文章