配置对多集群的访问

    你必须拥有一个 Kubernetes 的集群,同时你的 Kubernetes 集群必须带有 kubectl 命令行工具。 如果你还没有集群,你可以通过 构建一 个你自己的集群,或者你可以使用下面任意一个 Kubernetes 工具构建:

    要检查 kubectl 是否安装, 执行 kubectl version --client 命令。 kubectl 的版本应该与集群的 API 服务器 。

    定义集群、用户和上下文

    假设用户有两个集群,一个用于正式开发工作,一个用于其它临时用途(scratch)。 在 development 集群中,前端开发者在名为 frontend 的名字空间下工作, 存储开发者在名为 storage 的名字空间下工作。 在 scratch 集群中, 开发人员可能在默认名字空间下工作,也可能视情况创建附加的名字空间。 访问开发集群需要通过证书进行认证。 访问其它临时用途的集群需要通过用户名和密码进行认证。

    创建名为 config-exercise 的目录。 在 config-exercise 目录中,创建名为 config-demo 的文件,其内容为:

    配置文件描述了集群、用户名和上下文。config-demo 文件中含有描述两个集群、 两个用户和三个上下文的框架。

    进入 config-exercise 目录。输入以下命令,将群集详细信息添加到配置文件中:

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

    将用户详细信息添加到配置文件中:

    1. kubectl config --kubeconfig=config-demo set-credentials developer --client-certificate=fake-cert-file --client-key=fake-key-seefile
    2. kubectl config --kubeconfig=config-demo set-credentials experimenter --username=exp --password=some-password

    注意:

    • 要删除用户,可以运行 kubectl --kubeconfig=config-demo config unset users.<name>
    • 要删除集群,可以运行 kubectl --kubeconfig=config-demo config unset clusters.<name>
    • 要删除上下文,可以运行 kubectl --kubeconfig=config-demo config unset contexts.<name>

    将上下文详细信息添加到配置文件中:

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

    打开 config-demo 文件查看添加的详细信息。 也可以使用 config view 命令进行查看:

    1. kubectl config --kubeconfig=config-demo view

    输出展示了两个集群、两个用户和三个上下文:

    1. apiVersion: v1
    2. clusters:
    3. - cluster:
    4. certificate-authority: fake-ca-file
    5. server: https://1.2.3.4
    6. name: development
    7. - cluster:
    8. insecure-skip-tls-verify: true
    9. name: scratch
    10. contexts:
    11. - context:
    12. cluster: development
    13. namespace: frontend
    14. user: developer
    15. name: dev-frontend
    16. - context:
    17. cluster: development
    18. namespace: storage
    19. user: developer
    20. name: dev-storage
    21. - context:
    22. cluster: scratch
    23. namespace: default
    24. user: experimenter
    25. name: exp-scratch
    26. current-context: ""
    27. preferences: {}
    28. users:
    29. - name: developer
    30. user:
    31. client-certificate: fake-cert-file
    32. client-key: fake-key-file
    33. - name: experimenter
    34. user:
    35. password: some-password
    36. username: exp

    有时你可能希望在这里使用 BASE64 编码的数据而不是一个个独立的证书文件。 如果是这样,你需要在键名上添加 -data 后缀。例如, certificate-authority-dataclient-certificate-dataclient-key-data

    每个上下文包含三部分(集群、用户和名字空间),例如, dev-frontend 上下文表明:使用 developer 用户的凭证来访问 development 集群的 frontend 名字空间。

    设置当前上下文:

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

    现在当输入 kubectl 命令时,相应动作会应用于 dev-frontend 上下文中所列的集群和名字空间, 同时,命令会使用 dev-frontend 上下文中所列用户的凭证。

    使用 --minify 参数,来查看与当前上下文相关联的配置信息。

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

    输出结果展示了 dev-frontend 上下文相关的配置信息:

    现在假设用户希望在其它临时用途集群中工作一段时间。

    将当前上下文更改为 exp-scratch

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

    现在你发出的所有 kubectl 命令都将应用于 scratch 集群的默认名字空间。 同时,命令会使用 exp-scratch 上下文中所列用户的凭证。

    查看更新后的当前上下文 exp-scratch 相关的配置:

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

    最后,假设用户希望在 development 集群中的 storage 名字空间下工作一段时间。

    将当前上下文更改为 dev-storage

    1. kubectl config --kubeconfig=config-demo use-context dev-storage
    1. kubectl config --kubeconfig=config-demo view --minify

    config-exercise 目录中,创建名为 config-demo-2 的文件,其中包含以下内容:

    1. apiVersion: v1
    2. kind: Config
    3. contexts:
    4. - context:
    5. cluster: development
    6. namespace: ramp
    7. name: dev-ramp-up

    上述配置文件定义了一个新的上下文,名为 dev-ramp-up

    设置 KUBECONFIG 环境变量

    查看是否有名为 KUBECONFIG 的环境变量。 如有,保存 KUBECONFIG 环境变量当前的值,以便稍后恢复。 例如:

    1. export KUBECONFIG_SAVED=$KUBECONFIG

    Windows PowerShell

    1. $Env:KUBECONFIG_SAVED=$ENV:KUBECONFIG

    KUBECONFIG 环境变量是配置文件路径的列表,该列表在 Linux 和 Mac 中以冒号分隔, 在 Windows 中以分号分隔。 如果有 KUBECONFIG 环境变量,请熟悉列表中的配置文件。

    临时添加两条路径到 KUBECONFIG 环境变量中。 例如:

    Windows PowerShell

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

    config-exercise 目录中输入以下命令:

    1. kubectl config view

    输出展示了 KUBECONFIG 环境变量中所列举的所有文件合并后的信息。 特别地,注意合并信息中包含来自 config-demo-2 文件的 dev-ramp-up 上下文和来自 config-demo 文件的三个上下文:

    1. contexts:
    2. - context:
    3. cluster: development
    4. namespace: frontend
    5. user: developer
    6. name: dev-frontend
    7. - context:
    8. cluster: development
    9. namespace: ramp
    10. user: developer
    11. name: dev-ramp-up
    12. - context:
    13. cluster: development
    14. namespace: storage
    15. user: developer
    16. name: dev-storage
    17. - context:
    18. cluster: scratch
    19. namespace: default
    20. user: experimenter
    21. name: exp-scratch

    关于 kubeconfig 文件如何合并的更多信息,请参考 使用 kubeconfig 文件组织集群访问

    如果用户已经拥有一个集群,可以使用 kubectl 与集群进行交互, 那么很可能在 $HOME/.kube 目录下有一个名为 config 的文件。

    进入 $HOME/.kube 目录,看看那里有什么文件。通常会有一个名为 config 的文件,目录中可能还有其他配置文件。请简单地熟悉这些文件的内容。

    将 $HOME/.kube/config 追加到 KUBECONFIG 环境变量中

    如果有 $HOME/.kube/config 文件,并且还未列在 KUBECONFIG 环境变量中, 那么现在将它追加到 KUBECONFIG 环境变量中。 例如:

    1. export KUBECONFIG=$KUBECONFIG:$HOME/.kube/config

    Windows Powershell

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

    在配置练习目录中输入以下命令,查看当前 KUBECONFIG 环境变量中列举的所有文件合并后的配置信息:

    1. kubectl config view
    1. export KUBECONFIG=$KUBECONFIG_SAVED

    Windows PowerShell

    接下来