实现:
1、 将用户名、密码及ID写入master
去master节点新增一个文件,如果是有多个master,那么每个master同下操作。
里面内容结构是:用户名,密码(用户名和密码要保持一致),唯一ID。
echo "admin,admin,1" > /etc/kubernetes/pki/basic_auth_file
2、 修改yaml文件
vim /etc/kubernetes/manifests/kube-apiserver.yaml# 新增- --basic-auth-file=/etc/kubernetes/pki/basic_auth_file # add
3、改完后重启
# 这块根据自己master的名字kubectl get pod -n kube-system | grep kube-apiserver-k8smaster
4、 创建集群角色绑定
kubectl create clusterrolebinding login-on-dashboard-with-cluster-admin \--clusterrole=cluster-admin \--user=adminkubectl create clusterrolebinding test:anonymous--clusterrole=cluster-admin--user=system:anonymous
5、 检查集群角色绑定
kubectl get clusterrolebinding login-on-dashboard-with-cluster-admin
6、 转换字符并连接
echo 'admin:admin' | base64如图:输入自己的ip即可curl -k -XGET -H "Authorization: Basic xxx" 'https://10.4.107.207:6443/api'
用curl进行连接:
7、 用代码获得
package mainimport ("context""fmt"// v1 "k8s.io/api/apps/v1"metav1 "k8s.io/apimachinery/pkg/apis/meta/v1""k8s.io/apimachinery/pkg/runtime/schema""k8s.io/client-go/dynamic"// "k8s.io/client-go/kubernetes/scheme""k8s.io/client-go/rest")func getConfig() *rest.Config {config := rest.Config{Host: "https://10.4.104.169:6443",// ContentConfig: rest.ContentConfig{// GroupVersion: &v1.SchemeGroupVersion,// NegotiatedSerializer: scheme.Codecs.WithoutConversion(),// },TLSClientConfig: rest.TLSClientConfig{Insecure: true,},Username: "admin",Password: "admin",}return &config}func main() {// 设置资源组合版本gvr := schema.GroupVersionResource{Group: "apps", Version: "v1", Resource: "deployments"}// 获取config对象config := getConfig()// 获取动态客户端dynamicClient, _ := dynamic.NewForConfig(config)// 获取deployment资源resStruct, _ := dynamicClient.Resource(gvr).Namespace("default").Get(context.TODO(), "mysql", metav1.GetOptions{})// 将unstructured序列化成jsonj, _ := resStruct.MarshalJSON()// 打印jsonfmt.Println(string(j))}
测试结果: 
即:使用用户名和密码也可以访问集群内的资源!
