跳到主要内容

Kubernetes 的客户端连接配置

配置文件的基本结构

添加以下内容到 kubeconfig 文件中:

apiVersion: v1
kind: Config
clusters:
- name: <cluster-name>
cluster:
certificate-authority-data: <certificate-authority-data>
server: <api-server-url>
contexts:
- name: <context-name>
context:
cluster: <cluster-name>
user: <user-name>
current-context: <context-name>
users:
- name: <user-name>
user:
client-certificate-data: <client-certificate-data>
client-key-data: <client-key-data>

在上述内容中,你需要替换以下字段的值:

  • <cluster-name>:集群名称,可以根据实际情况进行命名。
  • <certificate-authority-data>:CA 证书数据,通常是一个长字符串。你可以将证书数据直接复制到这里,或者使用文件路径指向证书文件。
  • <api-server-url>:Kubernetes API 服务器的 URL,通常以 https:// 开头。
  • <context-name>:上下文名称,用于标识配置文件中的不同上下文。
  • <user-name>:用户名称,可以根据实际情况进行命名。
  • <client-certificate-data>:客户端证书数据,可以将证书数据直接复制到这里,或者使用文件路径指向证书文件。
  • <client-key-data>:客户端密钥数据,可以将密钥数据直接复制到这里,或者使用文件路径指向密钥文件。

请注意,上述字段值中的数据可以是直接复制的字符串,也可以是文件路径,具体取决于你的实际情况和访问集群的凭证配置。

配置 kubectl 远程访问

# 配置集群名称与服务地址
kubectl config --kubeconfig=${HOME}/.kube/config set-cluster cluster-name --server=https://{IP} --insecure-skip-tls-verify

# 设置一个管理用户为 admin,并设置访问凭证。此处使用 用户名-密码 的验证方式
kubectl config --kubeconfig=${HOME}/.kube/config set-credentials admin --username=username --password=pwd

# 设置一个名为 admin 的配置,使用 cluster-name 集群与 admin 用户的上下文
kubectl config --kubeconfig=${HOME}/.kube/config set-context admin --cluster=cluster-name --namespace=test --user=admin

# 启用 admin 为默认上下文
kubectl config --kubeconfig=${HOME}/.kube/config use-context admin

生成 kubeconfig 文件

编写一个自动生成的脚本

chmod +x generate-kubeconfig.sh
./generate-kubeconfig.sh
#!/bin/bash

# Set the cluster details
CLUSTER_NAME="my-cluster"
API_SERVER_ADDRESS="<api-server-address>"
USER_NAME="<user-name>"
CONTEXT_NAME="my-context"

# Path to your CA, client certificate and key
CA_PATH="/path/to/ca.crt"
CLIENT_CERT_PATH="/path/to/client.crt"
CLIENT_KEY_PATH="/path/to/client.key"

# Convert the CA certificate, client certificate and key into base64 encoded strings
CA_DATA=$(cat "$CA_PATH" | base64 | tr -d '\n')
CLIENT_CERTIFICATE_DATA=$(cat "$CLIENT_CERT_PATH" | base64 | tr -d '\n')
CLIENT_KEY_DATA=$(cat "$CLIENT_KEY_PATH" | base64 | tr -d '\n')

# kubeconfig file path (use default or specify one)
KUBECONFIG_FILE="$HOME/.kube/config"

# Create cluster entry
kubectl config --kubeconfig="$KUBECONFIG_FILE" set-cluster "$CLUSTER_NAME" \
--server="$API_SERVER_ADDRESS" \
--certificate-authority-data="$CA_DATA" \
--embed-certs=true

# Create credentials entry
kubectl config --kubeconfig="$KUBECONFIG_FILE" set-credentials "$USER_NAME" \
--client-certificate-data="$CLIENT_CERTIFICATE_DATA" \
--client-key-data="$CLIENT_KEY_DATA" \
--embed-certs=true

# Create context entry
kubectl config --kubeconfig="$KUBECONFIG_FILE" set-context "$CONTEXT_NAME" \
--cluster="$CLUSTER_NAME" \
--user="$USER_NAME"

# Set the current-context to the new context
kubectl config --kubeconfig="$KUBECONFIG_FILE" use-context "$CONTEXT_NAME"

echo "kubeconfig has been generated at $KUBECONFIG_FILE"

References