技术漫谈 | 通过配置kubectl config对多个kubernetes群集的访问


在使用kubernetes集群的时候当用户访问不同的kubernetes环境的时候可以随意切换 通过设置ClusterRole Role中的rules来控制集群下资源的操作

以下主要介绍用不同的kubernetes的认证信息来访问集群中的指定的namespace
1、通过Token访问
2、通过用户名密码访问
3、通过RBAC 来访问

先了解一番 kubectl config 命令:
Modify kubeconfig files using subcommands like "kubectl config set current-context my-context"

The loading order follows these rules:
  1. If the --kubeconfig flag is set, then only that file is loaded. The flag may only be set once and no merging takes
    place.
  2. If $KUBECONFIG environment variable is set, then it is used as a list of paths (normal path delimiting rules for
    your system). These paths are merged. When a value is modified, it is modified in the file that defines the stanza. When
    a value is created, it is created in the first file that exists. If no files in the chain exist, then it creates the
    last file in the list.
  3. Otherwise, ${HOME}/.kube/config is used and no merging takes place.

Available Commands:
current-context Displays the current-context
delete-cluster  Delete the specified cluster from the kubeconfig
delete-context  Delete the specified context from the kubeconfig
get-clusters    Display clusters defined in the kubeconfig
get-contexts    Describe one or many contexts
rename-context  Renames a context from the kubeconfig file.
set             Sets an individual value in a kubeconfig file
set-cluster     Sets a cluster entry in kubeconfig
set-context     Sets a context entry in kubeconfig
set-credentials Sets a user entry in kubeconfig
unset           Unsets an individual value in a kubeconfig file
use-context     Sets the current-context in a kubeconfig file
view            Display merged kubeconfig settings or a specified kubeconfig file

Usage:
kubectl config SUBCOMMAND [options]

Use "kubectl <command> --help" for more information about a given command.
Use "kubectl options" for a list of global command-line options (applies to all commands).


准备工作
1、设置api-server的token 认证信息
cat > /etc/kubernetes/pki/token_auth_file<<EOF
11111111111111,username,1
EOF


2、设置api-server的username password认证信息
cat > /etc/kubernetes/pki/basic_auth_file<<EOF
password,username,1
EOF


3、修改api-server的启动参数
- --token-auth-file=/etc/kubernetes/pki/token_auth_file
- --basic-auth-file=/etc/kubernetes/pki/basic_auth_file


4、 重启apisever

5、test api-server 是否配置成功
CLUSTER_NAME=kubernetes
API_SERVER=$(kubectl config view -o jsonpath="{.clusters[?(@.name==\"${CLUSTER_NAME}\")].cluster.server}")
curl ${API_SERVER}/version --basic -u username:password -k
curl ${API_SERVER}/version --header "Authorization: Bearer 11111111111111" -k


6、添加ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: wp-cluster-role
rules:
- apiGroups:
- '*'
resources:
- '*'
verbs:
- '*'
- nonResourceURLs:
- '*'
verbs:
- '*'


7、创建一个用于测试的namespace wp
kubectl create ns wp


8、创建RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: wp-role-binding
namespace: wp
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: wp-cluster-role
subjects:
- kind: ServiceAccount
name: default
namespace: wp
- kind: User
name: username


下面进行实际操作
一、使用api-server token来访问kubernetes
1、通过命令获取kubernetes cluster server
CLUSTER_NAME=kubernetes
API_SERVER=$(kubectl config view -o jsonpath="{.clusters[?(@.name==\"${CLUSTER_NAME}\")].cluster.server}")


2、设置 config中的集群信息

kubectl config set-cluster wp --insecure-skip-tls-verify=true --server=${API_SERVER
}

3、通过token设置客户端认证参数
kubectl config set-credentials wp --token=11111111111111


4、设置上下文参数
kubectl config set-context wp --cluster=wp --user=wp


5、使用当前的上下文
kubectl config use-context wp


二、 通过用户名密码来访问kubernetes
1、通过命令获取kubernetes cluster server
CLUSTER_NAME=kubernetes
API_SERVER=$(kubectl config view -o jsonpath="{.clusters[?(@.name==\"${CLUSTER_NAME}\")].cluster.server}")


2、设置 config中的集群信息

kubectl config set-cluster user-pwd-cluster --insecure-skip-tls-verify=true --server=${API_SERVER
}

3、通过token设置客户端认证参数
kubectl config set-credentials user --username=username --password=password


4、设置上下文参数
kubectl config set-context user --cluster=user-pwd-cluster  --user=user


5、使用当前的上下文
kubectl config use-context user


三、 通过rbac 的方式 来访问kubernetes
1、通过命令获取kubernetes cluster server
CLUSTER_NAME=kubernetes
API_SERVER=$(kubectl config view -o jsonpath="{.clusters[?(@.name==\"${CLUSTER_NAME}\")].cluster.server}")


2、设置 config中的集群信息

kubectl config set-cluster sa-cluster --insecure-skip-tls-verify=true --server=${API_SERVER
}

3、通过token设置客户端认证参数
kubectl config set-credentials sa --token=$(echo $(kubectl get secrets  default-token-c82z6 -n wp -o jsonpath="{.data.token}")|base64 -d)


4、设置上下文参数
kubectl config set-context sa --cluster=sa-cluster --user=sa


5、使用当前的上下文
kubectl config use-context sa


test
[root@localhost pki]# k get pod
Error from server (Forbidden): pods is forbidden: User "system:serviceaccount:wp:default" cannot list resource "pods" in API group "" in the namespace "default"
[root@localhost pki]# k get pod -n wp
NAME                     READY   STATUS    RESTARTS   AGE
nginx-7bb7cd8db5-xrwxw   1/1     Running   0          4m24s
[root@localhost pki]#


参考:
https://kubernetes.io/docs/ref ... dings
https://kubernetes.io/docs/ref ... rver/

原文链接:https://mp.weixin.qq.com/s/9G53WggUFTp39W9H8EheaQ

关于睿云智合

深圳睿云智合科技有限公司成立于2012年,总部位于深圳,并分别在成都、深圳设立了研发中心,北京、上海设立了分支机构,核心骨干人员全部为来自金融、科技行业知名企业资深业务专家、技术专家。早期专注于为中国金融保险等大型企业提供创新技术、电子商务、CRM等领域专业咨询服务。

自2016年始,在率先将容器技术引进到中国保险行业客户后,公司组建了专业的容器技术产品研发和实施服务团队,旨在帮助中国金融行业客户将容器创新技术应用于企业信息技术支持业务发展的基础能力改善与提升,成为中国金融保险行业容器技术服务领导品牌。

此外,凭借多年来在呼叫中心领域的业务经验与技术积累,睿云智合率先在业界推出基于开源软交换平台FreeSwitch的微服务架构多媒体数字化业务平台,将语音、视频、webchat、微信、微博等多种客户接触渠道集成,实现客户统一接入、精准识别、智能路由的CRM策略,并以容器化治理来支持平台的全应用生命周期管理,显著提升了数字化业务处理的灵活、高效、弹性、稳定等特性,为帮助传统企业向“以客户为中心”的数字化业务转型提供完美的一站式整体解决方案。

0 个评论

要回复文章请先登录注册