解析 Kubernetes 服务:使用 Python 和 kubectl

内容纲要

在 Kubernetes 上构建和部署应用时,我们经常需要与不同的服务进行交互。这些服务是由 Kubernetes 中的 Service 对象提供的,它们给 Pod 提供可靠的网络接口,并开放一个或多个端口供外部访问。有时,我们需要解析这些服务的配置,比如获取服务的名称、类型或端口等信息。

因此,本篇博客介绍了如何使用 Kubernetes 的命令行工具 kubectl 和 Python 编程语言来解析 Kubernetes 服务信息。

获取 Kubernetes 服务的 JSON 表现形式

首先,我们可以使用 kubectl 命令行工具获得 Kubernetes 集群上所有服务的 JSON 表现形式。这可以通过 kubectl get svc -o json 命令实现,其中 -o json 选项告诉 kubectl 我们希望以 JSON 格式输出服务信息。

kubectl get svc -o json 

这条命令将返回一个包含集群中所有服务的 JSON 对象。这个 JSON 对象的结构类似于以下:

{
 "kind": "ServiceList",
 "items": [
  {
   "metadata": {
    "name": "service_name",
   },
   "spec": {
    "type": "service_type",
    "ports": [
     {
      "port": "port_number",
      "targetPort": "target_port_number"
     }
    ]
   }
  }
 ]
}

使用 Python 解析 Kubernetes 服务

接下来,我们可以使用 Python 的内置库 json 来解析这个 JSON 。以下面的 Python 脚本为例,我们可以从 JSON 中获取每个服务的名称、类型和端口注。

import json

# 读取文件函数
def read_file(path):
    with(open(path, "r")) as file:
        return file.read()

# 读取json文件
service_data = read_file('C:\\Users\\k8s_svc.json')

# 将 json 数据转换为字典
data_dict = json.loads(service_data)

# 遍历每个服务
for item in data_dict['items']:
    # 提取服务的名称
    service_name = item['metadata']['name']

    # 提取服务的类型
    service_type = item['spec']['type']

    # 提取并联接所有的端口信息(可能有多个端口)
    service_ports = ', '.join([f"{port['port']}->{port['targetPort']}" for port in item['spec']['ports']])

    # 输出提取的服务信息
    print(f"Service Name: {service_name}, Type: {service_type}, Ports: {service_ports}")

运行此脚本将对每个服务输出其名称、类型和端口。

Service Name: kibana, Type: NodePort, Ports: 5601->5601
Service Name: kubernetes, Type: ClusterIP, Ports: 443->6443
Service Name: loki, Type: ClusterIP, Ports: 3100->http-metrics, 9095->grpc
Service Name: loki-memberlist, Type: ClusterIP, Ports: 7946->http-memberlist
Service Name: nginx-service, Type: NodePort, Ports: 40000->80
Service Name: sales-order-service, Type: ClusterIP, Ports: 8080->8080
Service Name: sales-product-service, Type: ClusterIP, Ports: 8080->8080

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部