k8s中的 secret token
生成kubernetes集群最高权限admin用户的token
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:name: adminannotations:rbac.authorization.kubernetes.io/autoupdate: "true"
roleRef:kind: ClusterRolename: cluster-adminapiGroup: rbac.authorization.k8s.io
subjects:
- kind: ServiceAccountname: adminnamespace: kube-system
---
apiVersion: v1
kind: ServiceAccount
metadata:name: adminnamespace: kube-systemlabels:kubernetes.io/cluster-service: "true"addonmanager.kubernetes.io/mode: Reconcile
然后执行下面的命令创建 serviceaccount 和角色绑定,
kubectl create -f admin-role.yaml
创建完成后获取secret中token的值。
获取admin-token的secret名字
$ kubectl -n kube-system get secret|grep admin-token
admin-token-2qdsz kubernetes.io/service-account-token 3 6m
获取token的值
# 注意:token是base64解码后的值
# kubectl -n kube-system describe secret admin-token-2qdsz
Name: admin-token-2qdsz
Namespace: kube-system
Labels: <none>
Annotations: kubernetes.io/service-account.name: adminkubernetes.io/service-account.uid: 4fe95396-6de8-4097-9ff9-4232f0151c71Type: kubernetes.io/service-account-tokenData
====
ca.crt: 1359 bytes
namespace: 11 bytes
token: eyJhbGciOiJSUzI1NiIsImtpZCI6Im9IQXYtZkpERlB0V0JHRnFwa2w1czR1Zzhja2lRWTU1cjhpWW1uaEo3cmsifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi10b2tlbi0ycWRzeiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJhZG1pbiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6IjRmZTk1Mzk2LTZkZTgtNDA5Ny05ZmY5LTQyMzJmMDE1MWM3MSIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlLXN5c3RlbTphZG1pbiJ9.Xsd8Oo4EYEe3eL4GQweDvnuEfsRoFF0O1RXo_HjACgsj8FMQtU2TdaBhaJk3p7Rvuc_gAz3FqJS9YOWHVlSQKqfL68RCEPfbqb-dXqnKuijFyUKD4NyhnQH42oMf9fWD0NuquhTlNASQSIXdl1WW0u0bY8cOxmQHOOIJvuHMeqLTLG3oQYSgdjdfhHUtrqF1EztORGQKYFoJEv0gZRnXhuUC30MNjVptKPPC8hEzGWaVkcMwTJVIYQ6IYWsoH3o9Z_kDveJpbiOwQO4bV39bfNuefuGZY2SoJTfnyz7ERdT7LZLZ153E14vFbxeaF-_ITD-7cSGqxLZNifv-fmSKzQ # 注意:token是base64编码后的值
# kubectl -n kube-system get secret admin-token-2qdsz -oyaml
apiVersion: v1
data:ca.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUR2akNDQXFhZ0F3SUJBZ0lVTVBFY1pDb3graHJPMlJzNk1oblNmTndzV3lJd0RRWUpLb1pJaHZjTkFRRUwKQlFBd1pURUxNQWtHQTFVRUJoTUNRMDR4RURBT0JnTlZCQWdUQjBKbGFVcHBibWN4RURBT0JnTlZCQWNUQjBKbAphVXBwYm1jeEREQUtCZ05WQkFvVEEyczRjekVQTUEwR0ExVUVDeE1HVTNsemRHVnRNUk13RVFZRFZRUURFd3ByCmRXSmxjbTVsZEdWek1CNFhEVEl4TVRJeE16QXlOVEV3TUZvWERUSTJNVEl4TWpBeU5URXdNRm93WlRFTE1Ba0cKQTFVRUJoTUNRMDR4RURBT0JnTlZCQWdUQjBKbGFVcHBibWN4RURBT0JnTlZCQWNUQjBKbGFVcHBibWN4RERBSwpCZ05WQkFvVEEyczRjekVQTUEwR0ExVUVDeE1HVTNsemRHVnRNUk13RVFZRFZRUURFd3ByZFdKbGNtNWxkR1Z6Ck1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBeVBsTmJlT2loa1Q0ZHZPVjBxT0QKbnhmSThxQUNFczV3RkZHZUUxamltcFJHZDJ2UVdEWHkwNVdJYVAzNnZrMzlNUGhXTndyVlJlTTQ1SG1VdFZMVApZZVF0TCtqZzJXNUtFVC9ENnBIRmFLalc4VG9CVHdXTUI4dFNSZ0JpTnRKRm5PTUp2Z2tZVDhqdlNTdUhnZjd1ClBvdWFLMUhrUFJYQjFpSi9OSDNQYzMwcTJBV1RmTmNFM21DYU9VMkQrWlBaWUpncGRIV0JCK1pOeHo0R1BCZjcKa2dwbSthQUdydmpzOGZMZFh5MzhhdzNwbitSWGtNNzN5M0w2dDEvbDFvQ0JKcjlQS2pVK0JVa0s1VkdORzFFNAoxQWppQVRUZ3U2S1JKRDV2SGNZeDBHRnJ3dnZDMzRwSCs2Uk1yUWtxZ2RpRlJZVVhEYi9BYjR6RzFlUmRaazArClJRSURBUUFCbzJZd1pEQU9CZ05WSFE4QkFmOEVCQU1DQVFZd0VnWURWUjBUQVFIL0JBZ3dCZ0VCL3dJQkFqQWQKQmdOVkhRNEVGZ1FVY3JvMFdxZ3l1VjJKbTlvbXd6UDlPS25scjN3d0h3WURWUjBqQkJnd0ZvQVVjcm8wV3FneQp1VjJKbTlvbXd6UDlPS25scjN3d0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQkFKK01HU1BvbHU4VGhkOE1jQTZjCm9EVGdGWTc1MU5RcmlXVXd5a2FBQ2xDZXY2YWp0RU1FdmFDWXZUOXhsaUUrM2lmZDlQTXlPYTB3dDlSUWhLVXIKc01WanVBcUxrWTBhbjhiTm5HeDdkc2IweThBS2JIYXlDQkVBb1ludUtiSXcxUlMvTEpTakJqa1NYS2dsN1c3SwpzNWlzTzBFRFBIS3BOM1lSN3ZiZDdzT2krOTgxTFBWMk4vb2x6TUd3VVNCSUJXTFliZHZveHY2N3JEc1YvZ1lXCjFSZklnOU9USThTVEZhM0RjcHZUNElaTHlIMFhaeisrdjRrK0NZVEptTG9mM0VibWVhQjBya2tNNTZNSFVYWFUKY3pKMi9ETmdhKzNTNU40N0RRYVUvRVlTQXpJWG05a2lYYncwbWZoNnJFcjhHQm9DQzRBWTVOcUJWWUhETjQ1MQpzdG89Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0Knamespace: a3ViZS1zeXN0ZW0=token: ZXlKaGJHY2lPaUpTVXpJMU5pSXNJbXRwWkNJNkltOUlRWFl0WmtwRVJsQjBWMEpIUm5Gd2EydzFjelIxWnpoamEybFJXVFUxY2pocFdXMXVhRW8zY21zaWZRLmV5SnBjM01pT2lKcmRXSmxjbTVsZEdWekwzTmxjblpwWTJWaFkyTnZkVzUwSWl3aWEzVmlaWEp1WlhSbGN5NXBieTl6WlhKMmFXTmxZV05qYjNWdWRDOXVZVzFsYzNCaFkyVWlPaUpyZFdKbExYTjVjM1JsYlNJc0ltdDFZbVZ5Ym1WMFpYTXVhVzh2YzJWeWRtbGpaV0ZqWTI5MWJuUXZjMlZqY21WMExtNWhiV1VpT2lKaFpHMXBiaTEwYjJ0bGJpMHljV1J6ZWlJc0ltdDFZbVZ5Ym1WMFpYTXVhVzh2YzJWeWRtbGpaV0ZqWTI5MWJuUXZjMlZ5ZG1salpTMWhZMk52ZFc1MExtNWhiV1VpT2lKaFpHMXBiaUlzSW10MVltVnlibVYwWlhNdWFXOHZjMlZ5ZG1salpXRmpZMjkxYm5RdmMyVnlkbWxqWlMxaFkyTnZkVzUwTG5WcFpDSTZJalJtWlRrMU16azJMVFprWlRndE5EQTVOeTA1Wm1ZNUxUUXlNekptTURFMU1XTTNNU0lzSW5OMVlpSTZJbk41YzNSbGJUcHpaWEoyYVdObFlXTmpiM1Z1ZERwcmRXSmxMWE41YzNSbGJUcGhaRzFwYmlKOS5Yc2Q4T280RVlFZTNlTDRHUXdlRHZudUVmc1JvRkYwTzFSWG9fSGpBQ2dzajhGTVF0VTJUZGFCaGFKazNwN1J2dWNfZ0F6M0ZxSlM5WU9XSFZsU1FLcWZMNjhSQ0VQZmJxYi1kWHFuS3VpakZ5VUtENE55aG5RSDQyb01mOWZXRDBOdXF1aFRsTkFTUVNJWGRsMVdXMHUwYlk4Y094bVFIT09JSnZ1SE1lcUxUTEczb1FZU2dkamRmaEhVdHJxRjFFenRPUkdRS1lGb0pFdjBnWlJuWGh1VUMzME1OalZwdEtQUEM4aEV6R1dhVmtjTXdUSlZJWVE2SVlXc29IM285Wl9rRHZlSnBiaU93UU80YlYzOWJmTnVlZnVHWlkyU29KVGZueXo3RVJkVDdMWkxaMTUzRTE0dkZieGVhRi1fSVRELTdjU0dxeExaTmlmdi1mbVNLelE=
kind: Secret
metadata:annotations:kubernetes.io/service-account.name: adminkubernetes.io/service-account.uid: 4fe95396-6de8-4097-9ff9-4232f0151c71creationTimestamp: "2022-05-07T03:41:41Z"name: admin-token-2qdsznamespace: kube-systemresourceVersion: "2962635"selfLink: /api/v1/namespaces/kube-system/secrets/admin-token-2qdszuid: 41e80ab2-3840-4cde-bad8-cdad915bbcc9
type: kubernetes.io/service-account-token
也可以使用 jsonpath 的方式直接获取 token 的值,如:
# kubectl -n kube-system get secret admin-token-2qdsz -o jsonpath={.data.token}
ZXlKaGJHY2lPaUpTVXpJMU5pSXNJbXRwWkNJNkltOUlRWFl0WmtwRVJsQjBWMEpIUm5Gd2EydzFjelIxWnpoamEybFJXVFUxY2pocFdXMXVhRW8zY21zaWZRLmV5SnBjM01pT2lKcmRXSmxjbTVsZEdWekwzTmxjblpwWTJWaFkyTnZkVzUwSWl3aWEzVmlaWEp1WlhSbGN5NXBieTl6WlhKMmFXTmxZV05qYjNWdWRDOXVZVzFsYzNCaFkyVWlPaUpyZFdKbExYTjVjM1JsYlNJc0ltdDFZbVZ5Ym1WMFpYTXVhVzh2YzJWeWRtbGpaV0ZqWTI5MWJuUXZjMlZqY21WMExtNWhiV1VpT2lKaFpHMXBiaTEwYjJ0bGJpMHljV1J6ZWlJc0ltdDFZbVZ5Ym1WMFpYTXVhVzh2YzJWeWRtbGpaV0ZqWTI5MWJuUXZjMlZ5ZG1salpTMWhZMk52ZFc1MExtNWhiV1VpT2lKaFpHMXBiaUlzSW10MVltVnlibVYwWlhNdWFXOHZjMlZ5ZG1salpXRmpZMjkxYm5RdmMyVnlkbWxqWlMxaFkyTnZkVzUwTG5WcFpDSTZJalJtWlRrMU16azJMVFprWlRndE5EQTVOeTA1Wm1ZNUxUUXlNekptTURFMU1XTTNNU0lzSW5OMVlpSTZJbk41YzNSbGJUcHpaWEoyYVdObFlXTmpiM1Z1ZERwcmRXSmxMWE41YzNSbGJUcGhaRzFwYmlKOS5Yc2Q4T280RVlFZTNlTDRHUXdlRHZudUVmc1JvRkYwTzFSWG9fSGpBQ2dzajhGTVF0VTJUZGFCaGFKazNwN1J2dWNfZ0F6M0ZxSlM5WU9XSFZsU1FLcWZMNjhSQ0VQZmJxYi1kWHFuS3VpakZ5VUtENE55aG5RSDQyb01mOWZXRDBOdXF1aFRsTkFTUVNJWGRsMVdXMHUwYlk4Y094bVFIT09JSnZ1SE1lcUxUTEczb1FZU2dkamRmaEhVdHJxRjFFenRPUkdRS1lGb0pFdjBnWlJuWGh1VUMzME1OalZwdEtQUEM4aEV6R1dhVmtjTXdUSlZJWVE2SVlXc29IM285Wl9rRHZlSnBiaU93UU80YlYzOWJmTnVlZnVHWlkyU29KVGZueXo3RVJkVDdMWkxaMTUzRTE0dkZieGVhRi1fSVRELTdjU0dxeExaTmlmdi1mbVNLelE=# kubectl -n kube-system get secret admin-token-2qdsz -o jsonpath={.data.token}|base64 -d
# kubectl -n kube-system get secret admin-token-2qdsz -o jsonpath={.data.token}|base64 --decode
eyJhbGciOiJSUzI1NiIsImtpZCI6Im9IQXYtZkpERlB0V0JHRnFwa2w1czR1Zzhja2lRWTU1cjhpWW1uaEo3cmsifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi10b2tlbi0ycWRzeiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJhZG1pbiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6IjRmZTk1Mzk2LTZkZTgtNDA5Ny05ZmY5LTQyMzJmMDE1MWM3MSIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlLXN5c3RlbTphZG1pbiJ9.Xsd8Oo4EYEe3eL4GQweDvnuEfsRoFF0O1RXo_HjACgsj8FMQtU2TdaBhaJk3p7Rvuc_gAz3FqJS9YOWHVlSQKqfL68RCEPfbqb-dXqnKuijFyUKD4NyhnQH42oMf9fWD0NuquhTlNASQSIXdl1WW0u0bY8cOxmQHOOIJvuHMeqLTLG3oQYSgdjdfhHUtrqF1EztORGQKYFoJEv0gZRnXhuUC30MNjVptKPPC8hEzGWaVkcMwTJVIYQ6IYWsoH3o9Z_kDveJpbiOwQO4bV39bfNuefuGZY2SoJTfnyz7ERdT7LZLZ153E14vFbxeaF-_ITD-7cSGqxLZNifv-fmSKzQ
注意:Linux 和 Mac 有自带的 base64 命令也可以直接使用,输入 base64 是进行编码,Linux 中base64 -d 表示解码,Mac 中使用 base64 -D。
api访问
# curl https://192.168.56.168:6443/api --header "Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6Im9IQXYtZkpERlB0V0JHRnFwa2w1czR1Zzhja2lRWTU1cjhpWW1uaEo3cmsifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi10b2tlbi0ycWRzeiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJhZG1pbiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6IjRmZTk1Mzk2LTZkZTgtNDA5Ny05ZmY5LTQyMzJmMDE1MWM3MSIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlLXN5c3RlbTphZG1pbiJ9.Xsd8Oo4EYEe3eL4GQweDvnuEfsRoFF0O1RXo_HjACgsj8FMQtU2TdaBhaJk3p7Rvuc_gAz3FqJS9YOWHVlSQKqfL68RCEPfbqb-dXqnKuijFyUKD4NyhnQH42oMf9fWD0NuquhTlNASQSIXdl1WW0u0bY8cOxmQHOOIJvuHMeqLTLG3oQYSgdjdfhHUtrqF1EztORGQKYFoJEv0gZRnXhuUC30MNjVptKPPC8hEzGWaVkcMwTJVIYQ6IYWsoH3o9Z_kDveJpbiOwQO4bV39bfNuefuGZY2SoJTfnyz7ERdT7LZLZ153E14vFbxeaF-_ITD-7cSGqxLZNifv-fmSKzQ" --insecure
{"kind": "APIVersions","versions": ["v1"],"serverAddressByClientCIDRs": [{"clientCIDR": "0.0.0.0/0","serverAddress": "192.168.56.168:6443"}]
}# TOKEN=$(kubectl -n kube-system get secret admin-token-2qdsz -o jsonpath={.data.token}|base64 --decode)
# APISERVER=https://192.168.56.168:6443
# curl -X GET $APISERVER/api --header "Authorization: Bearer $TOKEN" --insecure
{"kind": "APIVersions","versions": ["v1"],"serverAddressByClientCIDRs": [{"clientCIDR": "0.0.0.0/0","serverAddress": "192.168.56.168:6443"}]
}# curl -X GET $APISERVER/api/v1/nodes --header "Authorization: Bearer $TOKEN" --insecure
# curl -X GET $APISERVER/api/v1/namespaces/default/secrets --header "Authorization: Bearer $TOKEN" --insecure
# curl -X GET $APISERVER/api/v1/namespaces/kube-system/secrets --header "Authorization: Bearer $TOKEN" --insecure
# curl -X GET $APISERVER/api/v1/namespaces/kube-system/secrets/admin-token-2qdsz --header "Authorization: Bearer $TOKEN" --insecure
{"kind": "Secret","apiVersion": "v1","metadata": {"name": "admin-token-2qdsz","namespace": "kube-system","selfLink": "/api/v1/namespaces/kube-system/secrets/admin-token-2qdsz","uid": "41e80ab2-3840-4cde-bad8-cdad915bbcc9","resourceVersion": "2962635","creationTimestamp": "2022-05-07T03:41:41Z","annotations": {"kubernetes.io/service-account.name": "admin","kubernetes.io/service-account.uid": "4fe95396-6de8-4097-9ff9-4232f0151c71"},"managedFields": [{"manager": "kube-controller-manager","operation": "Update","apiVersion": "v1","time": "2022-05-07T03:41:41Z","fieldsType": "FieldsV1","fieldsV1": {"f:data":{".":{},"f:ca.crt":{},"f:namespace":{},"f:token":{}},"f:metadata":{"f:annotations":{".":{},"f:kubernetes.io/service-account.name":{},"f:kubernetes.io/service-account.uid":{}}},"f:type":{}}}]},"data": {"ca.crt": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUR2akNDQXFhZ0F3SUJBZ0lVTVBFY1pDb3graHJPMlJzNk1oblNmTndzV3lJd0RRWUpLb1pJaHZjTkFRRUwKQlFBd1pURUxNQWtHQTFVRUJoTUNRMDR4RURBT0JnTlZCQWdUQjBKbGFVcHBibWN4RURBT0JnTlZCQWNUQjBKbAphVXBwYm1jeEREQUtCZ05WQkFvVEEyczRjekVQTUEwR0ExVUVDeE1HVTNsemRHVnRNUk13RVFZRFZRUURFd3ByCmRXSmxjbTVsZEdWek1CNFhEVEl4TVRJeE16QXlOVEV3TUZvWERUSTJNVEl4TWpBeU5URXdNRm93WlRFTE1Ba0cKQTFVRUJoTUNRMDR4RURBT0JnTlZCQWdUQjBKbGFVcHBibWN4RURBT0JnTlZCQWNUQjBKbGFVcHBibWN4RERBSwpCZ05WQkFvVEEyczRjekVQTUEwR0ExVUVDeE1HVTNsemRHVnRNUk13RVFZRFZRUURFd3ByZFdKbGNtNWxkR1Z6Ck1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBeVBsTmJlT2loa1Q0ZHZPVjBxT0QKbnhmSThxQUNFczV3RkZHZUUxamltcFJHZDJ2UVdEWHkwNVdJYVAzNnZrMzlNUGhXTndyVlJlTTQ1SG1VdFZMVApZZVF0TCtqZzJXNUtFVC9ENnBIRmFLalc4VG9CVHdXTUI4dFNSZ0JpTnRKRm5PTUp2Z2tZVDhqdlNTdUhnZjd1ClBvdWFLMUhrUFJYQjFpSi9OSDNQYzMwcTJBV1RmTmNFM21DYU9VMkQrWlBaWUpncGRIV0JCK1pOeHo0R1BCZjcKa2dwbSthQUdydmpzOGZMZFh5MzhhdzNwbitSWGtNNzN5M0w2dDEvbDFvQ0JKcjlQS2pVK0JVa0s1VkdORzFFNAoxQWppQVRUZ3U2S1JKRDV2SGNZeDBHRnJ3dnZDMzRwSCs2Uk1yUWtxZ2RpRlJZVVhEYi9BYjR6RzFlUmRaazArClJRSURBUUFCbzJZd1pEQU9CZ05WSFE4QkFmOEVCQU1DQVFZd0VnWURWUjBUQVFIL0JBZ3dCZ0VCL3dJQkFqQWQKQmdOVkhRNEVGZ1FVY3JvMFdxZ3l1VjJKbTlvbXd6UDlPS25scjN3d0h3WURWUjBqQkJnd0ZvQVVjcm8wV3FneQp1VjJKbTlvbXd6UDlPS25scjN3d0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQkFKK01HU1BvbHU4VGhkOE1jQTZjCm9EVGdGWTc1MU5RcmlXVXd5a2FBQ2xDZXY2YWp0RU1FdmFDWXZUOXhsaUUrM2lmZDlQTXlPYTB3dDlSUWhLVXIKc01WanVBcUxrWTBhbjhiTm5HeDdkc2IweThBS2JIYXlDQkVBb1ludUtiSXcxUlMvTEpTakJqa1NYS2dsN1c3SwpzNWlzTzBFRFBIS3BOM1lSN3ZiZDdzT2krOTgxTFBWMk4vb2x6TUd3VVNCSUJXTFliZHZveHY2N3JEc1YvZ1lXCjFSZklnOU9USThTVEZhM0RjcHZUNElaTHlIMFhaeisrdjRrK0NZVEptTG9mM0VibWVhQjBya2tNNTZNSFVYWFUKY3pKMi9ETmdhKzNTNU40N0RRYVUvRVlTQXpJWG05a2lYYncwbWZoNnJFcjhHQm9DQzRBWTVOcUJWWUhETjQ1MQpzdG89Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K","namespace": "a3ViZS1zeXN0ZW0=","token": "ZXlKaGJHY2lPaUpTVXpJMU5pSXNJbXRwWkNJNkltOUlRWFl0WmtwRVJsQjBWMEpIUm5Gd2EydzFjelIxWnpoamEybFJXVFUxY2pocFdXMXVhRW8zY21zaWZRLmV5SnBjM01pT2lKcmRXSmxjbTVsZEdWekwzTmxjblpwWTJWaFkyTnZkVzUwSWl3aWEzVmlaWEp1WlhSbGN5NXBieTl6WlhKMmFXTmxZV05qYjNWdWRDOXVZVzFsYzNCaFkyVWlPaUpyZFdKbExYTjVjM1JsYlNJc0ltdDFZbVZ5Ym1WMFpYTXVhVzh2YzJWeWRtbGpaV0ZqWTI5MWJuUXZjMlZqY21WMExtNWhiV1VpT2lKaFpHMXBiaTEwYjJ0bGJpMHljV1J6ZWlJc0ltdDFZbVZ5Ym1WMFpYTXVhVzh2YzJWeWRtbGpaV0ZqWTI5MWJuUXZjMlZ5ZG1salpTMWhZMk52ZFc1MExtNWhiV1VpT2lKaFpHMXBiaUlzSW10MVltVnlibVYwWlhNdWFXOHZjMlZ5ZG1salpXRmpZMjkxYm5RdmMyVnlkbWxqWlMxaFkyTnZkVzUwTG5WcFpDSTZJalJtWlRrMU16azJMVFprWlRndE5EQTVOeTA1Wm1ZNUxUUXlNekptTURFMU1XTTNNU0lzSW5OMVlpSTZJbk41YzNSbGJUcHpaWEoyYVdObFlXTmpiM1Z1ZERwcmRXSmxMWE41YzNSbGJUcGhaRzFwYmlKOS5Yc2Q4T280RVlFZTNlTDRHUXdlRHZudUVmc1JvRkYwTzFSWG9fSGpBQ2dzajhGTVF0VTJUZGFCaGFKazNwN1J2dWNfZ0F6M0ZxSlM5WU9XSFZsU1FLcWZMNjhSQ0VQZmJxYi1kWHFuS3VpakZ5VUtENE55aG5RSDQyb01mOWZXRDBOdXF1aFRsTkFTUVNJWGRsMVdXMHUwYlk4Y094bVFIT09JSnZ1SE1lcUxUTEczb1FZU2dkamRmaEhVdHJxRjFFenRPUkdRS1lGb0pFdjBnWlJuWGh1VUMzME1OalZwdEtQUEM4aEV6R1dhVmtjTXdUSlZJWVE2SVlXc29IM285Wl9rRHZlSnBiaU93UU80YlYzOWJmTnVlZnVHWlkyU29KVGZueXo3RVJkVDdMWkxaMTUzRTE0dkZieGVhRi1fSVRELTdjU0dxeExaTmlmdi1mbVNLelE=" # base64编码后的},"type": "kubernetes.io/service-account-token"
}
kubeconfig (token)
apiVersion: v1
clusters:
- cluster:insecure-skip-tls-verify: trueserver: https://192.168.56.168:6443name: kubernetes
contexts:
- context:cluster: kubernetesuser: system:adminname: system:admin
current-context: system:admin
kind: Config
preferences: {}
users:
- name: system:adminuser:token: eyJhbGciOiJSUzI1NiIsImtpZCI6Im9IQXYtZkpERlB0V0JHRnFwa2w1czR1Zzhja2lRWTU1cjhpWW1uaEo3cmsifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi10b2tlbi0ycWRzeiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJhZG1pbiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6IjRmZTk1Mzk2LTZkZTgtNDA5Ny05ZmY5LTQyMzJmMDE1MWM3MSIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlLXN5c3RlbTphZG1pbiJ9.Xsd8Oo4EYEe3eL4GQweDvnuEfsRoFF0O1RXo_HjACgsj8FMQtU2TdaBhaJk3p7Rvuc_gAz3FqJS9YOWHVlSQKqfL68RCEPfbqb-dXqnKuijFyUKD4NyhnQH42oMf9fWD0NuquhTlNASQSIXdl1WW0u0bY8cOxmQHOOIJvuHMeqLTLG3oQYSgdjdfhHUtrqF1EztORGQKYFoJEv0gZRnXhuUC30MNjVptKPPC8hEzGWaVkcMwTJVIYQ6IYWsoH3o9Z_kDveJpbiOwQO4bV39bfNuefuGZY2SoJTfnyz7ERdT7LZLZ153E14vFbxeaF-_ITD-7cSGqxLZNifv-fmSKzQ
# kubectl --kubeconfig kubeconfig-168-token get secret -A 可用
# kubectl --kubeconfig kubeconfig-168-token get pod -A 可用
总结:token编解码
# 注意:token是base64解码后的值
# kubectl -n kube-system describe secret admin-token-2qdsz
Name: admin-token-2qdsz
Namespace: kube-system
Labels: <none>
Annotations: kubernetes.io/service-account.name: adminkubernetes.io/service-account.uid: 4fe95396-6de8-4097-9ff9-4232f0151c71Type: kubernetes.io/service-account-tokenData
====
ca.crt: 1359 bytes
namespace: 11 bytes
token: eyJhbGciOiJSUzI1NiIsImtpZCI6Im9IQXYtZkpERlB0V0JHRnFwa2w1czR1Zzhja2lRWTU1cjhpWW1uaEo3cmsifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi10b2tlbi0ycWRzeiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJhZG1pbiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6IjRmZTk1Mzk2LTZkZTgtNDA5Ny05ZmY5LTQyMzJmMDE1MWM3MSIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlLXN5c3RlbTphZG1pbiJ9.Xsd8Oo4EYEe3eL4GQweDvnuEfsRoFF0O1RXo_HjACgsj8FMQtU2TdaBhaJk3p7Rvuc_gAz3FqJS9YOWHVlSQKqfL68RCEPfbqb-dXqnKuijFyUKD4NyhnQH42oMf9fWD0NuquhTlNASQSIXdl1WW0u0bY8cOxmQHOOIJvuHMeqLTLG3oQYSgdjdfhHUtrqF1EztORGQKYFoJEv0gZRnXhuUC30MNjVptKPPC8hEzGWaVkcMwTJVIYQ6IYWsoH3o9Z_kDveJpbiOwQO4bV39bfNuefuGZY2SoJTfnyz7ERdT7LZLZ153E14vFbxeaF-_ITD-7cSGqxLZNifv-fmSKzQ # 注意:token是base64解码后的值
# kubectl -n kube-system get secret admin-token-2qdsz -o jsonpath={.data.token}|base64 -d
# kubectl -n kube-system get secret admin-token-2qdsz -o jsonpath={.data.token}|base64 --decode
eyJhbGciOiJSUzI1NiIsImtpZCI6Im9IQXYtZkpERlB0V0JHRnFwa2w1czR1Zzhja2lRWTU1cjhpWW1uaEo3cmsifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi10b2tlbi0ycWRzeiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJhZG1pbiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6IjRmZTk1Mzk2LTZkZTgtNDA5Ny05ZmY5LTQyMzJmMDE1MWM3MSIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlLXN5c3RlbTphZG1pbiJ9.Xsd8Oo4EYEe3eL4GQweDvnuEfsRoFF0O1RXo_HjACgsj8FMQtU2TdaBhaJk3p7Rvuc_gAz3FqJS9YOWHVlSQKqfL68RCEPfbqb-dXqnKuijFyUKD4NyhnQH42oMf9fWD0NuquhTlNASQSIXdl1WW0u0bY8cOxmQHOOIJvuHMeqLTLG3oQYSgdjdfhHUtrqF1EztORGQKYFoJEv0gZRnXhuUC30MNjVptKPPC8hEzGWaVkcMwTJVIYQ6IYWsoH3o9Z_kDveJpbiOwQO4bV39bfNuefuGZY2SoJTfnyz7ERdT7LZLZ153E14vFbxeaF-_ITD-7cSGqxLZNifv-fmSKzQ# 注意:token是base64编码后的值
# kubectl -n kube-system get secret admin-token-2qdsz -o jsonpath={.data.token}
ZXlKaGJHY2lPaUpTVXpJMU5pSXNJbXRwWkNJNkltOUlRWFl0WmtwRVJsQjBWMEpIUm5Gd2EydzFjelIxWnpoamEybFJXVFUxY2pocFdXMXVhRW8zY21zaWZRLmV5SnBjM01pT2lKcmRXSmxjbTVsZEdWekwzTmxjblpwWTJWaFkyTnZkVzUwSWl3aWEzVmlaWEp1WlhSbGN5NXBieTl6WlhKMmFXTmxZV05qYjNWdWRDOXVZVzFsYzNCaFkyVWlPaUpyZFdKbExYTjVjM1JsYlNJc0ltdDFZbVZ5Ym1WMFpYTXVhVzh2YzJWeWRtbGpaV0ZqWTI5MWJuUXZjMlZqY21WMExtNWhiV1VpT2lKaFpHMXBiaTEwYjJ0bGJpMHljV1J6ZWlJc0ltdDFZbVZ5Ym1WMFpYTXVhVzh2YzJWeWRtbGpaV0ZqWTI5MWJuUXZjMlZ5ZG1salpTMWhZMk52ZFc1MExtNWhiV1VpT2lKaFpHMXBiaUlzSW10MVltVnlibVYwWlhNdWFXOHZjMlZ5ZG1salpXRmpZMjkxYm5RdmMyVnlkbWxqWlMxaFkyTnZkVzUwTG5WcFpDSTZJalJtWlRrMU16azJMVFprWlRndE5EQTVOeTA1Wm1ZNUxUUXlNekptTURFMU1XTTNNU0lzSW5OMVlpSTZJbk41YzNSbGJUcHpaWEoyYVdObFlXTmpiM1Z1ZERwcmRXSmxMWE41YzNSbGJUcGhaRzFwYmlKOS5Yc2Q4T280RVlFZTNlTDRHUXdlRHZudUVmc1JvRkYwTzFSWG9fSGpBQ2dzajhGTVF0VTJUZGFCaGFKazNwN1J2dWNfZ0F6M0ZxSlM5WU9XSFZsU1FLcWZMNjhSQ0VQZmJxYi1kWHFuS3VpakZ5VUtENE55aG5RSDQyb01mOWZXRDBOdXF1aFRsTkFTUVNJWGRsMVdXMHUwYlk4Y094bVFIT09JSnZ1SE1lcUxUTEczb1FZU2dkamRmaEhVdHJxRjFFenRPUkdRS1lGb0pFdjBnWlJuWGh1VUMzME1OalZwdEtQUEM4aEV6R1dhVmtjTXdUSlZJWVE2SVlXc29IM285Wl9rRHZlSnBiaU93UU80YlYzOWJmTnVlZnVHWlkyU29KVGZueXo3RVJkVDdMWkxaMTUzRTE0dkZieGVhRi1fSVRELTdjU0dxeExaTmlmdi1mbVNLelE=# 注意:token是base64编码后的值
# curl -X GET $APISERVER/api/v1/namespaces/kube-system/secrets/admin-token-2qdsz --header "Authorization: Bearer $TOKEN" --insecure
{"kind": "Secret","apiVersion": "v1","metadata": {"name": "admin-token-2qdsz","namespace": "kube-system","selfLink": "/api/v1/namespaces/kube-system/secrets/admin-token-2qdsz","uid": "41e80ab2-3840-4cde-bad8-cdad915bbcc9","resourceVersion": "2962635","creationTimestamp": "2022-05-07T03:41:41Z","annotations": {"kubernetes.io/service-account.name": "admin","kubernetes.io/service-account.uid": "4fe95396-6de8-4097-9ff9-4232f0151c71"},"managedFields": [{"manager": "kube-controller-manager","operation": "Update","apiVersion": "v1","time": "2022-05-07T03:41:41Z","fieldsType": "FieldsV1","fieldsV1": {"f:data":{".":{},"f:ca.crt":{},"f:namespace":{},"f:token":{}},"f:metadata":{"f:annotations":{".":{},"f:kubernetes.io/service-account.name":{},"f:kubernetes.io/service-account.uid":{}}},"f:type":{}}}]},"data": {"ca.crt": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUR2akNDQXFhZ0F3SUJBZ0lVTVBFY1pDb3graHJPMlJzNk1oblNmTndzV3lJd0RRWUpLb1pJaHZjTkFRRUwKQlFBd1pURUxNQWtHQTFVRUJoTUNRMDR4RURBT0JnTlZCQWdUQjBKbGFVcHBibWN4RURBT0JnTlZCQWNUQjBKbAphVXBwYm1jeEREQUtCZ05WQkFvVEEyczRjekVQTUEwR0ExVUVDeE1HVTNsemRHVnRNUk13RVFZRFZRUURFd3ByCmRXSmxjbTVsZEdWek1CNFhEVEl4TVRJeE16QXlOVEV3TUZvWERUSTJNVEl4TWpBeU5URXdNRm93WlRFTE1Ba0cKQTFVRUJoTUNRMDR4RURBT0JnTlZCQWdUQjBKbGFVcHBibWN4RURBT0JnTlZCQWNUQjBKbGFVcHBibWN4RERBSwpCZ05WQkFvVEEyczRjekVQTUEwR0ExVUVDeE1HVTNsemRHVnRNUk13RVFZRFZRUURFd3ByZFdKbGNtNWxkR1Z6Ck1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBeVBsTmJlT2loa1Q0ZHZPVjBxT0QKbnhmSThxQUNFczV3RkZHZUUxamltcFJHZDJ2UVdEWHkwNVdJYVAzNnZrMzlNUGhXTndyVlJlTTQ1SG1VdFZMVApZZVF0TCtqZzJXNUtFVC9ENnBIRmFLalc4VG9CVHdXTUI4dFNSZ0JpTnRKRm5PTUp2Z2tZVDhqdlNTdUhnZjd1ClBvdWFLMUhrUFJYQjFpSi9OSDNQYzMwcTJBV1RmTmNFM21DYU9VMkQrWlBaWUpncGRIV0JCK1pOeHo0R1BCZjcKa2dwbSthQUdydmpzOGZMZFh5MzhhdzNwbitSWGtNNzN5M0w2dDEvbDFvQ0JKcjlQS2pVK0JVa0s1VkdORzFFNAoxQWppQVRUZ3U2S1JKRDV2SGNZeDBHRnJ3dnZDMzRwSCs2Uk1yUWtxZ2RpRlJZVVhEYi9BYjR6RzFlUmRaazArClJRSURBUUFCbzJZd1pEQU9CZ05WSFE4QkFmOEVCQU1DQVFZd0VnWURWUjBUQVFIL0JBZ3dCZ0VCL3dJQkFqQWQKQmdOVkhRNEVGZ1FVY3JvMFdxZ3l1VjJKbTlvbXd6UDlPS25scjN3d0h3WURWUjBqQkJnd0ZvQVVjcm8wV3FneQp1VjJKbTlvbXd6UDlPS25scjN3d0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQkFKK01HU1BvbHU4VGhkOE1jQTZjCm9EVGdGWTc1MU5RcmlXVXd5a2FBQ2xDZXY2YWp0RU1FdmFDWXZUOXhsaUUrM2lmZDlQTXlPYTB3dDlSUWhLVXIKc01WanVBcUxrWTBhbjhiTm5HeDdkc2IweThBS2JIYXlDQkVBb1ludUtiSXcxUlMvTEpTakJqa1NYS2dsN1c3SwpzNWlzTzBFRFBIS3BOM1lSN3ZiZDdzT2krOTgxTFBWMk4vb2x6TUd3VVNCSUJXTFliZHZveHY2N3JEc1YvZ1lXCjFSZklnOU9USThTVEZhM0RjcHZUNElaTHlIMFhaeisrdjRrK0NZVEptTG9mM0VibWVhQjBya2tNNTZNSFVYWFUKY3pKMi9ETmdhKzNTNU40N0RRYVUvRVlTQXpJWG05a2lYYncwbWZoNnJFcjhHQm9DQzRBWTVOcUJWWUhETjQ1MQpzdG89Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K","namespace": "a3ViZS1zeXN0ZW0=","token": "ZXlKaGJHY2lPaUpTVXpJMU5pSXNJbXRwWkNJNkltOUlRWFl0WmtwRVJsQjBWMEpIUm5Gd2EydzFjelIxWnpoamEybFJXVFUxY2pocFdXMXVhRW8zY21zaWZRLmV5SnBjM01pT2lKcmRXSmxjbTVsZEdWekwzTmxjblpwWTJWaFkyTnZkVzUwSWl3aWEzVmlaWEp1WlhSbGN5NXBieTl6WlhKMmFXTmxZV05qYjNWdWRDOXVZVzFsYzNCaFkyVWlPaUpyZFdKbExYTjVjM1JsYlNJc0ltdDFZbVZ5Ym1WMFpYTXVhVzh2YzJWeWRtbGpaV0ZqWTI5MWJuUXZjMlZqY21WMExtNWhiV1VpT2lKaFpHMXBiaTEwYjJ0bGJpMHljV1J6ZWlJc0ltdDFZbVZ5Ym1WMFpYTXVhVzh2YzJWeWRtbGpaV0ZqWTI5MWJuUXZjMlZ5ZG1salpTMWhZMk52ZFc1MExtNWhiV1VpT2lKaFpHMXBiaUlzSW10MVltVnlibVYwWlhNdWFXOHZjMlZ5ZG1salpXRmpZMjkxYm5RdmMyVnlkbWxqWlMxaFkyTnZkVzUwTG5WcFpDSTZJalJtWlRrMU16azJMVFprWlRndE5EQTVOeTA1Wm1ZNUxUUXlNekptTURFMU1XTTNNU0lzSW5OMVlpSTZJbk41YzNSbGJUcHpaWEoyYVdObFlXTmpiM1Z1ZERwcmRXSmxMWE41YzNSbGJUcGhaRzFwYmlKOS5Yc2Q4T280RVlFZTNlTDRHUXdlRHZudUVmc1JvRkYwTzFSWG9fSGpBQ2dzajhGTVF0VTJUZGFCaGFKazNwN1J2dWNfZ0F6M0ZxSlM5WU9XSFZsU1FLcWZMNjhSQ0VQZmJxYi1kWHFuS3VpakZ5VUtENE55aG5RSDQyb01mOWZXRDBOdXF1aFRsTkFTUVNJWGRsMVdXMHUwYlk4Y094bVFIT09JSnZ1SE1lcUxUTEczb1FZU2dkamRmaEhVdHJxRjFFenRPUkdRS1lGb0pFdjBnWlJuWGh1VUMzME1OalZwdEtQUEM4aEV6R1dhVmtjTXdUSlZJWVE2SVlXc29IM285Wl9rRHZlSnBiaU93UU80YlYzOWJmTnVlZnVHWlkyU29KVGZueXo3RVJkVDdMWkxaMTUzRTE0dkZieGVhRi1fSVRELTdjU0dxeExaTmlmdi1mbVNLelE=" # base64编码后的},"type": "kubernetes.io/service-account-token"
}
参考:
使用 kubeconfig 或 token 进行用户身份认证
获取Secret信息
k8s中的 secret token相关推荐
- k8s中的Secret
k8s中的Secret 1. 背景 2. 概念 3. 创建Secret 3.1 命令行的方式创建Secret 3.1.1 命令行创建Opaque类型的Secret 3.1.2 命令行创建docker ...
- k8s中secret解析
概览 Secret是用来保存小片敏感数据的k8s资源,例如密码,token,或者秘钥.这类数据当然也可以存放在Pod或者镜像中,但是放在Secret中是为了更方便的控制如何使用数据,并减少暴露的风险. ...
- K8s 中使用 cert-manager 申请免费 Https 证书
K8s 中使用 cert-manager 申请免费 Https 证书 Intro 最近在尝试将自己的应用从自己用 kind 部署的一个 k8s 集群迁移到 Azure 的 AKS 上,其中一个问题就是 ...
- 13、用 k8s 管理机密信息Secret、查看 Secret、volume 方式使用 Secret、环境变量方式使用 Secret、用 ConfigMap 管理配置
用 k8s 管理机密信息Secret 应用启动过程中可能需要一些敏感信息,比如访问数据库的用户名密码或者秘钥.将这些信息直接保存在容器镜像中显然不妥,Kubernetes 提供的解决方案是 Secre ...
- Kubernetes K8S之存储Secret详解
Kubernetes K8S之存储Secret详解 Secret概述 Secret类型 Service Account Opaque Secret 创建secret 将Secret挂载到Volume中 ...
- k8s之 service account token
在前一篇笔记中我们验证了使用sa的token作为一种认证,向apiserver发送请求,这里简述下它的认证原理和流程. 首先得知道这种token称为JWT(json web token),可以参考官网 ...
- k8s部署jar包_学习K8S之路.6--- 在K8S中部署Jenkins,并使用Jenkins打包jar包
一:部署jenkins jenkins官网:https://jenkins.io/download/ jenkins镜像:https://hub.docker.com/r/jenkins/jenkin ...
- asp.net core程序在k8s中基于rabbitmq队列消息数的HPA实践!
背景 最近一段时间,陆陆续续的把手里头项目都迁移到了k8s中,期间遇到很多的坑,并且也学到了许多k8s的知识(从0-1),大家都知道k8s中的一大特性是自动扩容,对此结合自己的业务发现很是有" ...
- ASP.NET Core Web API 集成测试中使用 Bearer Token
在 ASP.NET Core Web API 集成测试一文中, 我介绍了ASP.NET Core Web API的集成测试. 在那里我使用了测试专用的Startup类, 里面的配置和开发时有一些区别, ...
最新文章
- 深入浅出 CPropertySheet
- Mac休眠后解决卡死转圈问题
- 计算机软件专业 课程,_计算机软件_专业的课程设置.pdf
- 百度推出惊雷算法,打击快排产业,但重点是这个工具
- centos 没有可用的网络设备
- Spring boot错误处理原理
- python plot map_python的colormap总结(matplotlib+ncl+气象家园调色盘)
- no number java_java.lang.NumberFormatException问题!!!
- java运行出现XML_eclipse开发环境下,项目运行时出现pom.xml报错(java.io.PrintWriter)...
- UEFI下windows启动过程
- Tree Restoration Gym - 101755F (并查集)
- Linux下android开发环境 遇到的问题
- Illustrator 教程,如何在 Illustrator 中更改角色的姿势?
- PCB设计之3W规则和20H原则
- 各省份国内、入境旅游人数 (2007-2018年)
- java运行环境安装步骤_安装JAVA运行环境步骤
- Linux网络管理实战2-组建局域网
- 错误: 找不到符号 符号: 类 DaggerActivityComponent错误解决
- 在线高德地图Demo(新测)
- 电脑的组成与底层原理(CPU)