K8s-通过URL访问模式
背景
大多情况下,一般操作K8s资源都会使用SDK模式,比如client-go
但是其实还支持原生的URL访问模式
几种模式
kubectl
1 2 3 4 5 6
| kubectl proxy --port=8080 &
curl http://localhost:8080/api/ '{"versions": ["v1"]}'
|
curl(https)
- 创建管理员
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| cat << EOF > CreateServiceAccountRoleBinding.yaml apiVersion: v1 kind: ServiceAccount metadata: name: admin-user namespace: kube-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: admin-user roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: admin-user namespace: kube-system EOF
|
- 创建
1 2
| $ kubectl apply -f CreateServiceAccountRoleBinding.yaml $ kubectl get sa -n kube-system admin-user
|
- 获取token
1
| kubectl describe secret -n kube-system `kubectl get secret -n kube-system|grep admin-user|awk '{print $1}'`|grep '^token:'|awk '{print $2}'
|
- 访问
1 2 3 4 5
| TOKEN=$(kubectl describe secret -n kube-system `kubectl get secret -n kube-system|grep admin-user|awk '{print $1}'`|grep '^token:'|awk '{print $2}')
curl -k --header "Authorization: Bearer $TOKEN" https://192.169.44.154:6443/api
|
使用证书
1 2
| $ CACERT=/etc/kubernetes/pki/ca.crt $ curl --cacert $CACERT --header "Authorization: Bearer $TOKEN" https://192.168.0.113:6443/api
|
Go代码访问
api大全
示例代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| package main
import ( "crypto/tls" "fmt" "io" "net/http" )
func main() { client := &http.Client{Transport: &http.Transport{ TLSClientConfig: &tls.Config{ InsecureSkipVerify: true, }, }} targetUrl := "https://10.10.102.96:6443/api/v1/namespaces/default/services"
req, _ := http.NewRequest("GET", targetUrl, nil)
req.Header.Add("Authorization", "Bearer xxx")
response, err := client.Do(req) if err != nil { fmt.Println(err) return } s, err := io.ReadAll(response.Body) if err != nil { fmt.Println(err) return } sprintf := fmt.Sprintf("%s", s) fmt.Println(sprintf) }
|