k8s学习笔记六之连接集群的方式
文章目录
k8s学习笔记六之连接集群的方式
链接集群
通过 Kubernetes 部署和管理应用,你需要使用 Kubernetes命令行工具, kubectl. 它可以让您检查集群资源,创建、删除和更新组件以及更多功能。您会用它来查看新集群并生成示例应用程序。
安装和设置
- 安装kubectl(省略)
- 配置kubectl 为了让 kubectl 能够找到并能够访问 Kubernetes 群集,它需要一个kubeconfig 文件,使用kube-up.sh创建群集的时候会自动创建它。 (有关创建集群请看 用户指南)。 如果你需要访问一个不是你创建的群集,请看 访问共享集群文档。 默认情况下,kubectl 配置文件会在~/.kube/config。
通过获取群集状态来检测 kubectl 是否正确配置:
|
|
如果看到了一个网址,那么 OK 了。
访问集群
- 访问集群api
-
- 第一次使用kubectl访问
-
- 直接访问rest api
-
-
- 使用kubectl proxy 访问
-
-
-
- 不使用kubectl proxy 访问
-
-
- 通过编程方式访问api
-
- 从一个pod访问api
- 通过运行在集群上的服务访问
-
- 链接方式
-
-
- 发现内置服务
-
-
-
-
- 手动构建apiserver代理URL
-
-
-
-
-
-
- 示例
-
-
-
-
-
-
- 使用web浏览器访问集群上的运行的服务
-
-
- 请求重定向
- 多种代理
访问集群API
- 第一次使用kubectl访问 使用 kubectl 命令来查看地址和凭证信息:
|
|
- 直接访问rest api Kubectl处理对apiserver的定位和身份验证。 如果您想使用诸如curl或wget之类的http客户端或浏览器直接访问REST API,可以通过以下几种方式来定位和认证: 在代理模式下运行kubectl。 推荐方法。 使用存储的apiserver位置。 使用自签名证书验证apiserver的身份。 不可能有MITM。 向apiserver进行身份验证。 将来可能会进行智能的客户端负载平衡和故障转移。 直接将位置和凭据提供给http客户端。 替代方法。 与某些使用代理混淆的客户端代码一起使用。 需要将根证书导入浏览器以防止MITM
- 使用kubectl proxy
|
|
使用curl浏览api
|
|
- 不适用kubectl proxy
|
|
MITM攻击。 当kubectl访问群集时,它将使用存储的根证书和客户端证书来访问服务器。 (它们安装在〜/ .kube目录中)。 由于群集证书通常是自签名的,因此可能需要特殊配置才能使http客户端使用根证书。 在某些群集上,apiserver不需要身份验证。 它可能在localhost上服务,或受到防火墙保护。 这没有标准。 配置对API的访问权限描述了集群管理员如何配置它。 此类方法可能与将来的高可用性支持相冲突
- 编程的方式访问api 有用于从几种语言访问API的客户端库。 Kubernetes项目支持的Go客户端库可以使用与kubectl CLI相同的kubeconfig文件来定位和验证apiserver
- 从pod访问api(略)
通过运行在集群上的服务访问
- 链接方式
- 通过公共IP访问服务
-
- 使用类型为NodePort或LoadBalancer的服务使该服务在群集外部可访问。
-
- 根据您的群集环境,这可能仅将服务公开给您的公司网络,或者可能将其公开给Internet。 考虑所公开的服务是否安全。 它是否进行自己的身份验证?
-
- 将pods放在services后面。 要从一组副本中访问一个特定的Pod(例如用于调试),请在其Pod上放置一个唯一的标签,并创建一个选择此标签的新服务。
-
- 在大多数情况下,应用程序开发人员不必通过节点的nodeIP直接访问节点。
- 使用代理Verb访问services,nodes或者pods
-
- 在访问远程服务之前是否进行apiserver身份验证和授权。 如果服务的安全性不足以暴露给Internet,访问节点IP上的端口或进行调试,则使用此方法。
-
- 代理可能会导致某些Web应用程序出现问题。
-
- 仅适用于HTTP / HTTPS。
- 从集群中的node或pod进行访问
-
- 运行一个pod,然后使用kubectl exec连接到其中的shell。 从该shell连接到其他节点,pod和服务。
-
- 某些群集可能允许您SSH到群集中的节点。 从那里您可能能够访问群集服务。 这是一种非标准的方法,将在某些群集上有效,但在其他群集上无效。 浏览器和其他工具可能会也可能不会安装。 群集DNS可能无法正常工作
- 发现内置服务 通常,有几种服务是通过kube系统在群集上启动的。使用kubectl cluster-info命令获取这些列表:
|
|
- 手动构建apiserver代理URL
可以使用
kubectl cluster-info
命令找回service proxy url. 创建proxy urls包含了服务endpoints,suffixes和parameters
|
|
- 示例
访问Elasticsearch service endpoint
_search?q=user:kimchy
应该使用
|
|
访问Elasticsearch集群health信息_cluster/health?pretty=true
应该使用:
|
|
- 使用web浏览器访问集群上的运行的服务 您可能可以将apiserver代理URL放入浏览器的地址栏中。 但是:Web浏览器通常不能传递令牌,因此您可能需要使用基本(密码)身份验证。 可以将Apiserver配置为接受基本身份验证,但是您的群集可能没有配置为接受基本身份验证。 某些Web应用程序可能无法正常运行,尤其是那些使用客户端javascript而不知道代理路径前缀的方式构造网址的Web应用程序
请求重定向
重定向功能已被弃用和删除。 请改为使用代理(请参见下文)。
多重代理
一下可能会遇到同步几种代理:
- kubectl代理:
- 在用户的桌面或pod中运行
- 从本地主机地址到Kubernetes apiserver的代理
- 客户端到代理使用HTTP
- 代理到apiserver使用HTTPS
- 定位apiserver
- 添加身份验证标头
- apiserver代理:
- 是apiserver的内置堡垒
- 将群集外部的用户连接到群集IP,否则将无法访问
- 在apiserver进程中运行
- 客户端代理使用HTTPS(如果apiserver如此配置,则为http)
- 目标代理可以使用代理使用可用信息选择的HTTP或HTTPS
- 可以用于访问节点,Pod或服务
- 在用于访问服务时进行负载平衡
- kube代理:
- 在每个节点上运行
- 代理UDP和TCP
- 不理解HTTP
- 提供负载平衡
- 仅用于访问服务
- apiserver前面的代理/负载均衡器:
- 存在和实现因群集而异(例如nginx)
- 位于所有客户端和一个或多个apiserver之间
- 如果有多个apiserver,则充当负载均衡器
- 基于外部服务的Cloud Load Balancer
- 由某些云提供商提供(例如AWS ELB,Google Cloud Load Balancer)
- 当Kubernetes服务的类型为LoadBalancer时自动创建-仅使用UDP / TCP-实现因云提供商而异。
通过kubeconifg接入集群
可以复制kubectl
客户端配置文件 (kubeconfig) 可以访问正在运行的 Kubernetes 群集。 通过 cluster/kube-up.sh
产生的,配置文件在 $HOME/.kube/config
中,生成并使用kubeconfig
的详细步骤如下:
1. 创建一个群集
2. 复制 kubeconfig
到新主机
|
|
3. 在新主机中,让kubectl
可以使用config
副本
- 选项 A:复制到默认位置
|
|
- 选项 B:复制到工作目录(kubectl 使用的)
|
|
- 选项 C:手动指定
kubectl
到kubeconfig
所在位置
|
|
手动生成 kubeconfig
kubeconfig
是由 kube-up
生成的,你也可以用下面的命令自己生成它(任何指令集):
|
|
笔记:
--embed-certs
是指需要产生一个独立的kubeconfig
,将在另一台主机上运行。--kubeconfig
既加载配置参数,也加载保存的配置文件。如果第一次运行,上面的--kubeconfig
文件可能会被忽略
|
|
- 这个 ca_file, key_file, 和上面提到 KUBE 群集主机产生的 cert_file。 他们可以在
/srv/kubernetes
文件夹下。 承载的 token/basic 身份认证 也由 kube 主机上产生。 查看 kubeconfig-file.md 来了解更多kubeconfig
细节 , 或者运行kubectl config -h
.
合并 kubeconfig
的例子
kubectl
加载并合并配置文件(按顺序)
--kubeconfig=/path/to/.kube/config
命令行标识KUBECONFIG=/path/to/.kube/config
环境变量$PWD/.kube/config
$HOME/.kube/config
如果在 host1 创建群集 A,B, 在 host2 上创建群集 C,D,你可以在两台主机上运行所有四组群集。
|
|
加载 / 合并 kubeconfig
的详细的例子和说明在 kubeconfig-file。
集群安全认证
文章作者 gorpher
上次更新 2017-04-29