W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
當(dāng)你第一次訪問 Kubernetes API 的時(shí)候,我們建議你使用 Kubernetes CLI 工具 ?kubectl
?。
訪問集群時(shí),你需要知道集群的地址并且擁有訪問的憑證。通常,這些在你通過 啟動(dòng)安裝安裝集群時(shí)都是自動(dòng)安裝好的,或者其他人安裝時(shí) 也應(yīng)該提供了憑證和集群地址。
通過以下命令檢查 kubectl 是否知道集群地址及憑證:
kubectl config view
Kubectl 處理 apiserver 的定位和身份驗(yàn)證。 如果要使用 curl 或 wget 等 http 客戶端或?yàn)g覽器直接訪問 REST API,可以通過 多種方式查找和驗(yàn)證:
以下命令以反向代理的模式運(yùn)行 kubectl。它處理 apiserver 的定位和驗(yàn)證。 像這樣運(yùn)行:
kubectl proxy --port=8080
參閱 kubectl proxy 獲取更多詳細(xì)信息。
然后,你可以使用 curl、wget 或?yàn)g覽器訪問 API,如果是 IPv6 則用 [::1] 替換 localhost, 如下所示:
curl http://localhost:8080/api/
輸出類似于:
{
"kind": "APIVersions",
"versions": [
"v1"
],
"serverAddressByClientCIDRs": [
{
"clientCIDR": "0.0.0.0/0",
"serverAddress": "10.0.1.149:443"
}
]
}
使用 ?kubectl apply
? 和 ?kubectl describe secret ...
? 及 grep 和剪切操作來為 default 服務(wù)帳戶創(chuàng)建令牌,如下所示:
首先,創(chuàng)建 Secret,請(qǐng)求默認(rèn) ServiceAccount 的令牌:
kubectl apply -f - <<EOF
apiVersion: v1
kind: Secret
metadata:
name: default-token
annotations:
kubernetes.io/service-account.name: default
type: kubernetes.io/service-account-token
EOF
接下來,等待令牌控制器使用令牌填充 Secret:
while ! kubectl describe secret default-token | grep -E '^token' >/dev/null; do
echo "waiting for token..." >&2
sleep 1
done
捕獲并使用生成的令牌:
APISERVER=$(kubectl config view --minify | grep server | cut -f 2- -d ":" | tr -d " ")
TOKEN=$(kubectl describe secret default-token | grep -E '^token' | cut -f2 -d':' | tr -d " ")
curl $APISERVER/api --header "Authorization: Bearer $TOKEN" --insecure
輸出類似于:
{
"kind": "APIVersions",
"versions": [
"v1"
],
"serverAddressByClientCIDRs": [
{
"clientCIDR": "0.0.0.0/0",
"serverAddress": "10.0.1.149:443"
}
]
}
?jsonpath
?方法實(shí)現(xiàn):
APISERVER=$(kubectl config view --minify -o jsonpath='{.clusters[0].cluster.server}')
TOKEN=$(kubectl get secret default-token -o jsonpath='{.data.token}' | base64 --decode)
curl $APISERVER/api --header "Authorization: Bearer $TOKEN" --insecure
輸出類似于:
{
"kind": "APIVersions",
"versions": [
"v1"
],
"serverAddressByClientCIDRs": [
{
"clientCIDR": "0.0.0.0/0",
"serverAddress": "10.0.1.149:443"
}
]
}
上面的例子使用了 ?--insecure
? 參數(shù),這使得它很容易受到 MITM 攻擊。 當(dāng) kubectl 訪問集群時(shí),它使用存儲(chǔ)的根證書和客戶端證書來訪問服務(wù)器 (它們安裝在 ?~/.kube
? 目錄中)。 由于集群證書通常是自簽名的,因此可能需要特殊配置才能讓你的 http 客戶端使用根證書。
在一些集群中,apiserver 不需要身份驗(yàn)證;它可能只服務(wù)于 localhost,或者被防火墻保護(hù), 這個(gè)沒有一定的標(biāo)準(zhǔn)。
Kubernetes 官方提供對(duì) Go 和 Python 的客戶端庫支持。
go get k8s.io/client-go@kubernetes-<kubernetes-version-number>
?, 有關(guān)詳細(xì)安裝說明,請(qǐng)參閱 INSTALL.md。 請(qǐng)參閱
https://github.com/kubernetes/client-go 以查看支持的版本。import "k8s.io/client-go/kubernetes"
? 才是對(duì)的。Go 客戶端可以像 kubectl CLI 一樣使用相同的 kubeconfig 文件 來定位和驗(yàn)證 apiserver??蓞㈤?nbsp;示例。
如果想要使用 Python 客戶端, 請(qǐng)運(yùn)行命令:?pip install kubernetes
?。參閱 Python Client Library page 以獲得更詳細(xì)的安裝參數(shù)。
Python 客戶端可以像 kubectl CLI 一樣使用相同的 kubeconfig 文件 來定位和驗(yàn)證 apiserver,可參閱 示例。
當(dāng)你從 Pod 中訪問 API 時(shí),定位和驗(yàn)證 API 服務(wù)器會(huì)有些許不同。
重定向功能已棄用并被刪除。請(qǐng)改用代理(見下文)。
使用 Kubernetes 時(shí)可能會(huì)遇到幾種不同的代理:
LoadBalancer
?時(shí)自動(dòng)創(chuàng)建
除了前兩種類型之外,Kubernetes 用戶通常不需要擔(dān)心任何其他問題。 集群管理員通常會(huì)確保后者的正確配置。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: