新聞中心
使用 kubectl 完成集群的第一次訪問
當(dāng)你第一次訪問 Kubernetes API 的時(shí)候,我們建議你使用 Kubernetes CLI 工具 ?kubectl?。

創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),龍華企業(yè)網(wǎng)站建設(shè),龍華品牌網(wǎng)站建設(shè),網(wǎng)站定制,龍華網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,龍華網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
訪問集群時(shí),你需要知道集群的地址并且擁有訪問的憑證。通常,這些在你通過 啟動(dòng)安裝安裝集群時(shí)都是自動(dòng)安裝好的,或者其他人安裝時(shí) 也應(yīng)該提供了憑證和集群地址。
通過以下命令檢查 kubectl 是否知道集群地址及憑證:
kubectl config view
直接訪問 REST API
Kubectl 處理 apiserver 的定位和身份驗(yàn)證。 如果要使用 curl 或 wget 等 http 客戶端或?yàn)g覽器直接訪問 REST API,可以通過 多種方式查找和驗(yàn)證:
- 以代理模式運(yùn)行 kubectl。
- 推薦此方式。
- 使用已存儲(chǔ)的 apiserver 地址。
- 使用自簽名的證書來驗(yàn)證 apiserver 的身份。杜絕 MITM 攻擊。
- 對(duì) apiserver 進(jìn)行身份驗(yàn)證。
- 未來可能會(huì)實(shí)現(xiàn)智能化的客戶端負(fù)載均衡和故障恢復(fù)。
- 直接向 http 客戶端提供位置和憑據(jù)。
- 可選的方案。
- 適用于代理可能引起混淆的某些客戶端類型。
- 需要引入根證書到你的瀏覽器以防止 MITM 攻擊。
使用 kubectl proxy
以下命令以反向代理的模式運(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 proxy
使用 ?kubectl apply? 和 ?kubectl describe secret ...? 及 grep 和剪切操作來為 default 服務(wù)帳戶創(chuàng)建令牌,如下所示:
首先,創(chuàng)建 Secret,請(qǐng)求默認(rèn) ServiceAccount 的令牌:
kubectl apply -f - <接下來,等待令牌控制器使用令牌填充 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)。
以編程方式訪問 API
Kubernetes 官方提供對(duì) Go 和 Python 的客戶端庫支持。
Go 客戶端
- 想要獲得這個(gè)庫,請(qǐng)運(yùn)行命令:?
go get K8S.io/client-go@kubernetes-?, 有關(guān)詳細(xì)安裝說明,請(qǐng)參閱 INSTALL.md。 請(qǐng)參閱 https://github.com/kubernetes/client-go 以查看支持的版本。 - 基于這個(gè) client-go 客戶端庫編寫應(yīng)用程序。 請(qǐng)注意,client-go 定義了自己的 API 對(duì)象,因此如果需要,請(qǐng)從 client-go 而不是從主存儲(chǔ)庫 導(dǎo)入 API 定義,例如,?
import "k8s.io/client-go/kubernetes"? 才是對(duì)的。
Go 客戶端可以像 kubectl CLI 一樣使用相同的 kubeconfig 文件 來定位和驗(yàn)證 apiserver??蓞㈤?nbsp;示例。
Python 客戶端
如果想要使用 Python 客戶端, 請(qǐng)運(yùn)行命令:?pip install kubernetes?。參閱 Python Client Library page 以獲得更詳細(xì)的安裝參數(shù)。
Python 客戶端可以像 kubectl CLI 一樣使用相同的 kubeconfig 文件 來定位和驗(yàn)證 apiserver,可參閱 示例。
從 Pod 中訪問 API
當(dāng)你從 Pod 中訪問 API 時(shí),定位和驗(yàn)證 API 服務(wù)器會(huì)有些許不同。
請(qǐng)求重定向
重定向功能已棄用并被刪除。請(qǐng)改用代理(見下文)。
多種代理
使用 Kubernetes 時(shí)可能會(huì)遇到幾種不同的代理:
- kubectl 代理:
- 在用戶的桌面或 Pod 中運(yùn)行
- 代理從本地主機(jī)地址到 Kubernetes apiserver
- 客戶端到代理將使用 HTTP
- 代理到 apiserver 使用 HTTPS
- 定位 apiserver
- 添加身份驗(yàn)證頭部
- apiserver 代理:
- 內(nèi)置于 apiserver 中
- 將集群外部的用戶連接到集群 IP,否則這些 IP 可能無法訪問
- 運(yùn)行在 apiserver 進(jìn)程中
- 客戶端代理使用 HTTPS(也可配置為 http)
- 代理將根據(jù)可用的信息決定使用 HTTP 或者 HTTPS 代理到目標(biāo)
- 可用于訪問節(jié)點(diǎn)、Pod 或服務(wù)
- 在訪問服務(wù)時(shí)進(jìn)行負(fù)載平衡
- kube proxy:
- 運(yùn)行在每個(gè)節(jié)點(diǎn)上
- 代理 UDP 和 TCP
- 不能代理 HTTP
- 提供負(fù)載均衡
- 只能用來訪問服務(wù)
- 位于 apiserver 之前的 Proxy/Load-balancer:
- 存在和實(shí)現(xiàn)因集群而異(例如 nginx)
- 位于所有客戶和一個(gè)或多個(gè) apiserver 之間
- 如果有多個(gè) apiserver,則充當(dāng)負(fù)載均衡器
- 外部服務(wù)上的云負(fù)載均衡器:
- 由一些云提供商提供(例如 AWS ELB,Google Cloud Load Balancer)
- 當(dāng) Kubernetes 服務(wù)類型為 ?
LoadBalancer?時(shí)自動(dòng)創(chuàng)建 - 只使用 UDP/TCP
- 具體實(shí)現(xiàn)因云提供商而異。
除了前兩種類型之外,Kubernetes 用戶通常不需要擔(dān)心任何其他問題。 集群管理員通常會(huì)確保后者的正確配置。
網(wǎng)站名稱:創(chuàng)新互聯(lián)kubernetes教程:Kubernetes訪問集群
瀏覽地址:http://www.dlmjj.cn/article/dpshidh.html


咨詢
建站咨詢
