生成kubeconfig并通过kubectl连接Kubernetes集群

安装kubectl

文档:kubernetes.io/docs/tasks/...

Mac安装:

shell 复制代码
curl -LO "https://dl.k8s.io/release/v1.29.1/bin/darwin/arm64/kubectl"

chmod +x ./kubectl

sudo mv ./kubectl /usr/local/bin/kubectl

kubectl version --client --output=yaml

Centos安装:

shell 复制代码
#  添加kubernetes yum源,注意修改版本好
cat <<EOF | tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.29/rpm/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.29/rpm/repodata/repomd.xml.key
EOF

# 安装指定版本
yum install -y kubectl-1.29.1

# 设置 kubectl 自动补全功能
yum install -y bash-completion
kubectl completion bash > /etc/bash_completion.d/kubectl
source /etc/bash_completion.d/kubectl

Kubernetes 账号介绍

Kubernetes中账户区分为:User Accounts(用户账户) 和 Service Accounts(服务账户) 两种:

  • UserAccount是给kubernetes集群外部用户使用的,例如运维或者集群管理人员,使用kubectl命令时用的就是UserAccount账户;UserAccount是全局性。在集群所有namespaces中,名称具有唯一性,默认情况下用户为admin;
  • ServiceAccount是给运行在Pod的程序使用的身份认证,Pod容器的进程需要访问API Server时用的就是ServiceAccount账户;ServiceAccount仅局限它所在的namespace,每个namespace都会自动创建一个default service account;创建Pod时,如果没有指定Service Account,Pod则会使用default Service Account。

生成kubeconfig(X509客户端证书方式)

配置ClusterConfiguration文件,用于kubeadm生成kubeconfig

yaml 复制代码
apiVersion: kubeadm.k8s.io/v1beta3
kind: ClusterConfiguration
# kubernetes 将作为 kubeconfig 中集群名称
clusterName: "kubernetes"
# 集群 kubeconfig 文件中服务地址(IP 或者 DNS 名称)
controlPlaneEndpoint: "47.107.131.191:6443"
# 从本地挂载集群的 CA 秘钥和 CA 证书
certificatesDir: "/etc/kubernetes/pki"

配置可以使用命令获得:

shell 复制代码
kubectl -n kube-system get configmaps kubeadm-config -o yaml

超级用户

system:masters组授权了cluster-admin角色,允许超级用户在平台上的任何资源上执行所有操作

shell 复制代码
kubeadm kubeconfig user --config cluster-configuration.yaml --org system:masters --client-name <username> --validity-period 24h > <username>.kubeconfig

集群管理员用户

1. 创建ClusterRoleBinding

授予了admin集群角色

yaml 复制代码
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: admin-binding
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: admin
subjects:
  - apiGroup: rbac.authorization.k8s.io
    kind: User
    name: <username>

2. 创建kubeconfig

shell 复制代码
kubeadm kubeconfig user --config cluster-configuration.yaml --client-name <username> --validity-period 24h > <username>.kubeconfig

普通集群用户

1. 创建ClusterRoleBinding

这里只授予集群的查看权限的角色

yaml 复制代码
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: cluster-view
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: view
subjects:
  - apiGroup: rbac.authorization.k8s.io
    kind: User
    name: <username>

2. 创建kubeconfig

shell 复制代码
kubeadm kubeconfig user --config cluster-configuration.yaml --client-name <username> --validity-period 24h > <username>.kubeconfig

普通用户

1. 创建Role和RoleBinding

只在指定的命名空间下授权权限

yaml 复制代码
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: <roleName>
  namespace: <namespace>
rules:
  - apiGroups:
      - '*'
    resources:
      - '*'
    verbs:
      - get
      - watch
      - list
      - create
      - update
      - patch
      - delete
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: <roleBindingName>
  namespace: <namespace>
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: <roleName>
subjects:
  - apiGroup: rbac.authorization.k8s.io
    kind: User
    name: <username>

2. 创建kubeconfig

shell 复制代码
kubeadm kubeconfig user --config cluster-configuration.yaml --client-name <username> --validity-period 24h > <username>.kubeconfig

ServiceAccount Token

使用命令生成ServiceAccount的Token

shell 复制代码
kubectl create token <serviceAccountName> -n <namespace>

token也可以用于kubeconfig的认证配置,如:

yaml 复制代码
apiVersion: v1
kind: Config
clusters:
- name: kubernetes
  cluster:
    server: xxxx:6443
    certificate-authority-data: xxxxxx

users:
- name: xxx
  user:
    token: <token>

contexts:
- name: xxx@kubernetes
  context:
    user: xxx
    cluster: kubernetes

current-context: "xxx@kubernetes"

验证kubeconfig

可以选择以下任意方式

一、使用KUBECONFIG环境变量

KUBECONFIG 环境变量包含一个 kubeconfig 文件列表。 对于 Linux 和 Mac,此列表以英文冒号分隔。对于 Windows,此列表以英文分号分隔。 KUBECONFIG 环境变量不是必需的。 如果 KUBECONFIG 环境变量不存在,kubectl 将使用默认的 kubeconfig 文件:$HOME/.kube/config。

如果 KUBECONFIG 环境变量存在,kubectl 将使用 KUBECONFIG 环境变量中列举的文件合并后的有效配置

shell 复制代码
kubectl cluster-info

二、使用默认路径

将kubeconfig文件内容复制到 $HOME/.kube/config文件中。

shell 复制代码
kubectl cluster-info

三、使用--kubeconfig参数指定文件

shell 复制代码
kubectl cluster-info --kubeconfig ./xxx.kubeconfig

多集群配置可以使用 kubectl config use-context xxx进行切换

相关链接:

kubernetes.io/zh-cn/docs/...

kubernetes.io/zh-cn/docs/...

developer.aliyun.com/mirror/kube...

blog.csdn.net/fushan2012/...

www.cnblogs.com/orchidzjl/p...

相关推荐
晚风吹人醒.10 分钟前
Awk文本处理工具:命令模式,脚本模式的介绍及正则表达式应用举例
linux·运维·服务器·awk
lbt_dvshare29 分钟前
vim 常用技巧和实例
linux·编辑器·vim
阿拉伯柠檬30 分钟前
传输层与传输层协议UDP
linux·网络·网络协议·面试·udp
你好helloworld32 分钟前
linux离线安装nvidia-docker
linux·运维·服务器
忙里偷闲学python36 分钟前
mysql
linux·数据库·mysql·oracle
lbb 小魔仙1 小时前
【Linux】Linux入门实战教程:文件系统与进程管理
linux·运维·服务器
HIT_Weston1 小时前
76、【Ubuntu】【Hugo】搭建私人博客:Hugo 版本更新
linux·运维·ubuntu
摇滚侠1 小时前
VMvare 虚拟机 centOS 7 安装 Docker,Docker 安装 Kong Konga
docker·centos·kong
运维行者_1 小时前
网络流量分析入门:从流量监控与 netflow 看懂核心作用
运维·开发语言·网络·云原生·容器·kubernetes·php
wangyongpro1 小时前
Ubuntu 系统盘拓展分区空间大小
linux·运维·ubuntu