Kubernetes 配置對(duì)多集群的訪問(wèn)

2022-06-16 09:53 更新

配置對(duì)多集群的訪問(wèn)

本文展示如何使用配置文件來(lái)配置對(duì)多個(gè)集群的訪問(wèn)。 在將集群、用戶和上下文定義在一個(gè)或多個(gè)配置文件中之后,用戶可以使用 ?kubectl config use-context? 命令快速地在集群之間進(jìn)行切換。

說(shuō)明:
用于配置集群訪問(wèn)的文件有時(shí)被稱為 kubeconfig 文件。 這是一種引用配置文件的通用方式,并不意味著存在一個(gè)名為 ?kubeconfig ?的文件。

警告: 只使用來(lái)源可靠的 kubeconfig 文件。使用特制的 kubeconfig 文件可能會(huì)導(dǎo)致惡意代碼執(zhí)行或文件暴露。 如果必須使用不受信任的 kubeconfig 文件,請(qǐng)首先像檢查 shell 腳本一樣仔細(xì)檢查它。

在開(kāi)始之前

你必須擁有一個(gè) Kubernetes 的集群,同時(shí)你的 Kubernetes 集群必須帶有 kubectl 命令行工具。 建議在至少有兩個(gè)節(jié)點(diǎn)的集群上運(yùn)行本教程,且這些節(jié)點(diǎn)不作為控制平面主機(jī)。 如果你還沒(méi)有集群,你可以通過(guò) Minikube 構(gòu)建一個(gè)你自己的集群,或者你可以使用下面任意一個(gè) Kubernetes 工具構(gòu)建:

要檢查 kubectl 是否安裝, 執(zhí)行 ?kubectl version --client? 命令。 kubectl 的版本應(yīng)該與集群的 API 服務(wù)器 使用同一次版本號(hào)。

定義集群、用戶和上下文 

假設(shè)用戶有兩個(gè)集群,一個(gè)用于正式開(kāi)發(fā)工作,一個(gè)用于其它臨時(shí)用途(scratch)。 在 ?development ?集群中,前端開(kāi)發(fā)者在名為 ?frontend ?的名字空間下工作, 存儲(chǔ)開(kāi)發(fā)者在名為 ?storage ?的名字空間下工作。在 ?scratch ?集群中, 開(kāi)發(fā)人員可能在默認(rèn)名字空間下工作,也可能視情況創(chuàng)建附加的名字空間。 訪問(wèn)開(kāi)發(fā)集群需要通過(guò)證書進(jìn)行認(rèn)證。 訪問(wèn)其它臨時(shí)用途的集群需要通過(guò)用戶名和密碼進(jìn)行認(rèn)證。

創(chuàng)建名為 ?config-exercise? 的目錄。在 ?config-exercise? 目錄中,創(chuàng)建名為 ?config-demo? 的文件,其內(nèi)容為:

apiVersion: v1
kind: Config
preferences: {}

clusters:
- cluster:
  name: development
- cluster:
  name: scratch

users:
- name: developer
- name: experimenter

contexts:
- context:
  name: dev-frontend
- context:
  name: dev-storage
- context:
  name: exp-scratch

配置文件描述了集群、用戶名和上下文。?config-demo? 文件中含有描述兩個(gè)集群、 兩個(gè)用戶和三個(gè)上下文的框架。

進(jìn)入 ?config-exercise? 目錄。輸入以下命令,將集群詳細(xì)信息添加到配置文件中:

kubectl config --kubeconfig=config-demo set-cluster development --server=https://1.2.3.4 --certificate-authority=fake-ca-file
kubectl config --kubeconfig=config-demo set-cluster scratch --server=https://5.6.7.8 --insecure-skip-tls-verify

將用戶詳細(xì)信息添加到配置文件中:

kubectl config --kubeconfig=config-demo set-credentials developer --client-certificate=fake-cert-file --client-key=fake-key-seefile
kubectl config --kubeconfig=config-demo set-credentials experimenter --username=exp --password=some-password
說(shuō)明:
要?jiǎng)h除用戶,可以運(yùn)行 ?kubectl --kubeconfig=config-demo config unset users.<name>?
要?jiǎng)h除集群,可以運(yùn)行 ?kubectl --kubeconfig=config-demo config unset clusters.<name>?
要?jiǎng)h除上下文,可以運(yùn)行 ?kubectl --kubeconfig=config-demo config unset contexts.<name>?

將上下文詳細(xì)信息添加到配置文件中:

kubectl config --kubeconfig=config-demo set-context dev-frontend --cluster=development --namespace=frontend --user=developer
kubectl config --kubeconfig=config-demo set-context dev-storage --cluster=development --namespace=storage --user=developer
kubectl config --kubeconfig=config-demo set-context exp-scratch --cluster=scratch --namespace=default --user=experimenter

打開(kāi) ?config-demo? 文件查看添加的詳細(xì)信息。也可以使用 ?config view? 命令進(jìn)行查看:

kubectl config --kubeconfig=config-demo view

輸出展示了兩個(gè)集群、兩個(gè)用戶和三個(gè)上下文:

apiVersion: v1
clusters:
- cluster:
    certificate-authority: fake-ca-file
    server: https://1.2.3.4
  name: development
- cluster:
    insecure-skip-tls-verify: true
    server: https://5.6.7.8
  name: scratch
contexts:
- context:
    cluster: development
    namespace: frontend
    user: developer
  name: dev-frontend
- context:
    cluster: development
    namespace: storage
    user: developer
  name: dev-storage
- context:
    cluster: scratch
    namespace: default
    user: experimenter
  name: exp-scratch
current-context: ""
kind: Config
preferences: {}
users:
- name: developer
  user:
    client-certificate: fake-cert-file
    client-key: fake-key-file
- name: experimenter
  user:
    password: some-password
    username: exp

其中的 ?fake-ca-file?、?fake-cert-file? 和 ?fake-key-file? 是證書文件路徑名的占位符。 你需要更改這些值,使之對(duì)應(yīng)你的環(huán)境中證書文件的實(shí)際路徑名。

有時(shí)你可能希望在這里使用 BASE64 編碼的數(shù)據(jù)而不是一個(gè)個(gè)獨(dú)立的證書文件。 如果是這樣,你需要在鍵名上添加 ?-data? 后綴。例如, ?certificate-authority-data?、?client-certificate-data? 和 ?client-key-data?。

每個(gè)上下文包含三部分(集群、用戶和名字空間),例如, ?dev-frontend? 上下文表明:使用 ?developer ?用戶的憑證來(lái)訪問(wèn) ?development ?集群的 ?frontend ?名字空間。

設(shè)置當(dāng)前上下文:

kubectl config --kubeconfig=config-demo use-context dev-frontend

現(xiàn)在當(dāng)輸入 ?kubectl ?命令時(shí),相應(yīng)動(dòng)作會(huì)應(yīng)用于 ?dev-frontend? 上下文中所列的集群和名字空間, 同時(shí),命令會(huì)使用 ?dev-frontend? 上下文中所列用戶的憑證。

使用 ?--minify? 參數(shù),來(lái)查看與當(dāng)前上下文相關(guān)聯(lián)的配置信息。

kubectl config --kubeconfig=config-demo view --minify

輸出結(jié)果展示了 ?dev-frontend? 上下文相關(guān)的配置信息:

apiVersion: v1
clusters:
- cluster:
    certificate-authority: fake-ca-file
    server: https://1.2.3.4
  name: development
contexts:
- context:
    cluster: development
    namespace: frontend
    user: developer
  name: dev-frontend
current-context: dev-frontend
kind: Config
preferences: {}
users:
- name: developer
  user:
    client-certificate: fake-cert-file
    client-key: fake-key-file

現(xiàn)在假設(shè)用戶希望在其它臨時(shí)用途集群中工作一段時(shí)間。

將當(dāng)前上下文更改為 ?exp-scratch?:

kubectl config --kubeconfig=config-demo use-context exp-scratch

現(xiàn)在你發(fā)出的所有 ?kubectl ?命令都將應(yīng)用于 ?scratch ?集群的默認(rèn)名字空間。 同時(shí),命令會(huì)使用 ?exp-scratch? 上下文中所列用戶的憑證。

查看更新后的當(dāng)前上下文 ?exp-scratch? 相關(guān)的配置:

kubectl config --kubeconfig=config-demo view --minify

最后,假設(shè)用戶希望在 ?development ?集群中的 ?storage ?名字空間下工作一段時(shí)間。

將當(dāng)前上下文更改為 ?dev-storage?:

kubectl config --kubeconfig=config-demo use-context dev-storage

查看更新后的當(dāng)前上下文 ?dev-storage? 相關(guān)的配置:

kubectl config --kubeconfig=config-demo view --minify

創(chuàng)建第二個(gè)配置文件 

在 ?config-exercise? 目錄中,創(chuàng)建名為 ?config-demo-2? 的文件,其中包含以下內(nèi)容:

apiVersion: v1
kind: Config
preferences: {}

contexts:
- context:
    cluster: development
    namespace: ramp
    user: developer
  name: dev-ramp-up

上述配置文件定義了一個(gè)新的上下文,名為 ?dev-ramp-up?。

設(shè)置 KUBECONFIG 環(huán)境變量 

查看是否有名為 ?KUBECONFIG ?的環(huán)境變量。 如有,保存 ?KUBECONFIG ?環(huán)境變量當(dāng)前的值,以便稍后恢復(fù)。 例如:

Linux 

export KUBECONFIG_SAVED="$KUBECONFIG"

Windows PowerShell 

$Env:KUBECONFIG_SAVED=$ENV:KUBECONFIG

?KUBECONFIG ?環(huán)境變量是配置文件路徑的列表,該列表在 Linux 和 Mac 中以冒號(hào)分隔, 在 Windows 中以分號(hào)分隔。 如果有 ?KUBECONFIG ?環(huán)境變量,請(qǐng)熟悉列表中的配置文件。

臨時(shí)添加兩條路徑到 ?KUBECONFIG ?環(huán)境變量中。例如:

Linux

export KUBECONFIG="${KUBECONFIG}:config-demo:config-demo-2"

Windows PowerShell

$Env:KUBECONFIG=("config-demo;config-demo-2")

在 ?config-exercise? 目錄中輸入以下命令:

kubectl config view

輸出展示了 ?KUBECONFIG ?環(huán)境變量中所列舉的所有文件合并后的信息。 特別地,注意合并信息中包含來(lái)自 ?config-demo-2? 文件的 ?dev-ramp-up? 上下文和來(lái)自 ?config-demo? 文件的三個(gè)上下文:

contexts:
- context:
    cluster: development
    namespace: frontend
    user: developer
  name: dev-frontend
- context:
    cluster: development
    namespace: ramp
    user: developer
  name: dev-ramp-up
- context:
    cluster: development
    namespace: storage
    user: developer
  name: dev-storage
- context:
    cluster: scratch
    namespace: default
    user: experimenter
  name: exp-scratch

探索 $HOME/.kube 目錄 

如果用戶已經(jīng)擁有一個(gè)集群,可以使用 ?kubectl ?與集群進(jìn)行交互, 那么很可能在 ?$HOME/.kube? 目錄下有一個(gè)名為 ?config ?的文件。

進(jìn)入 ?$HOME/.kube? 目錄,看看那里有什么文件。通常會(huì)有一個(gè)名為 ?config ?的文件,目錄中可能還有其他配置文件。請(qǐng)簡(jiǎn)單地熟悉這些文件的內(nèi)容。

將 $HOME/.kube/config 追加到 KUBECONFIG 環(huán)境變量中 

如果有 ?$HOME/.kube/config? 文件,并且還未列在 ?KUBECONFIG ?環(huán)境變量中, 那么現(xiàn)在將它追加到 ?KUBECONFIG ?環(huán)境變量中。 例如:

Linux 

export KUBECONFIG="${KUBECONFIG}:$HOME/.kube/config"

Windows Powershell 

$Env:KUBECONFIG="$Env:KUBECONFIG;$HOME\.kube\config"

在配置練習(xí)目錄中輸入以下命令,查看當(dāng)前 ?KUBECONFIG ?環(huán)境變量中列舉的所有文件合并后的配置信息:

kubectl config view

清理 

將 ?KUBECONFIG ?環(huán)境變量還原為原始值。例如:

Linux 

export KUBECONFIG="$KUBECONFIG_SAVED"

Windows PowerShell

$Env:KUBECONFIG=$ENV:KUBECONFIG_SAVED


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)