实现:
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=admin
kubectl 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 main
import (
"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序列化成json
j, _ := resStruct.MarshalJSON()
// 打印json
fmt.Println(string(j))
}
测试结果:
即:使用用户名和密码也可以访问集群内的资源!