本页面介绍了如何连接到 Kubernetes 集群中运行的服务。
你需要有一个 Kubernetes 集群,并且必须配置 kubectl 命令行工具以与你的集群通信。建议在至少有两个节点的集群上运行本教程,且这些节点不能作为控制平面主机。如果你还没有集群,可以通过 minikube 创建一个,或者使用以下 Kubernetes 演练场之一。
要检查版本,请输入 kubectl version。
在 Kubernetes 中,节点、Pod 和 服务 都有各自的 IP。在许多情况下,集群上的节点 IP、Pod IP 和某些服务 IP 是不可路由的,因此无法从集群外部的机器(例如您的桌面机器)访问它们。
您有几种从集群外部连接到节点、Pod 和服务的选项:
NodePort 或 LoadBalancer 的服务,使其在集群外部可访问。请参阅 服务 和 kubectl expose 文档。通常,kube-system 会在集群上启动若干服务。使用 kubectl cluster-info 命令获取这些服务的列表。
kubectl cluster-info
输出类似于此
Kubernetes master is running at https://192.0.2.1
elasticsearch-logging is running at https://192.0.2.1/api/v1/namespaces/kube-system/services/elasticsearch-logging/proxy
kibana-logging is running at https://192.0.2.1/api/v1/namespaces/kube-system/services/kibana-logging/proxy
kube-dns is running at https://192.0.2.1/api/v1/namespaces/kube-system/services/kube-dns/proxy
grafana is running at https://192.0.2.1/api/v1/namespaces/kube-system/services/monitoring-grafana/proxy
heapster is running at https://192.0.2.1/api/v1/namespaces/kube-system/services/monitoring-heapster/proxy
这显示了访问每个服务的代理动词 URL。例如,此集群启用了集群级日志记录(使用 Elasticsearch),如果提供了适当的凭据,可以通过 https://192.0.2.1/api/v1/namespaces/kube-system/services/elasticsearch-logging/proxy/ 访问它,或者通过 kubectl 代理访问,例如:https://:8080/api/v1/namespaces/kube-system/services/elasticsearch-logging/proxy/。
如上所述,您可以使用 kubectl cluster-info 命令检索服务的代理 URL。要创建包含服务端点、后缀和参数的代理 URL,请附加到服务的代理 URL:http://kubernetes_master_address/api/v1/namespaces/namespace_name/services/[https:]service_name[:port_name]/proxy
如果您没有为端口指定名称,则无需在 URL 中指定 port_name。您还可以使用端口号代替 port_name,既适用于命名端口,也适用于未命名端口。
默认情况下,API server 使用 HTTP 代理到您的服务。要使用 HTTPS,请在服务名称前加上 https::http://<kubernetes_master_address>/api/v1/namespaces/<namespace_name>/services/<service_name>/proxy
URL 的 <service_name> 段支持的格式为:
<service_name> - 使用 http 代理到默认或未命名端口<service_name>:<port_name> - 使用 http 代理到指定的端口名称或端口号https:<service_name>: - 使用 https 代理到默认或未命名端口(注意末尾的冒号)https:<service_name>:<port_name> - 使用 https 代理到指定的端口名称或端口号要访问 Elasticsearch 服务端点 _search?q=user:kimchy,您可以使用
http://192.0.2.1/api/v1/namespaces/kube-system/services/elasticsearch-logging/proxy/_search?q=user:kimchy
要访问 Elasticsearch 集群健康信息 _cluster/health?pretty=true,您可以使用
https://192.0.2.1/api/v1/namespaces/kube-system/services/elasticsearch-logging/proxy/_cluster/health?pretty=true
健康信息类似于以下内容
{
"cluster_name" : "kubernetes_logging",
"status" : "yellow",
"timed_out" : false,
"number_of_nodes" : 1,
"number_of_data_nodes" : 1,
"active_primary_shards" : 5,
"active_shards" : 5,
"relocating_shards" : 0,
"initializing_shards" : 0,
"unassigned_shards" : 5
}
要访问 https Elasticsearch 服务健康信息 _cluster/health?pretty=true,您可以使用
https://192.0.2.1/api/v1/namespaces/kube-system/services/https:elasticsearch-logging:/proxy/_cluster/health?pretty=true
您可以尝试将 apiserver 代理 URL 放入浏览器的地址栏中。但是: