python通过kubernetes模块获取ingress域名

最近有个需求是获取kubernetes中间的域名ingress列表

使用的python版本是3.10
C:\Users\kaikai>python
Python 3.10.0 (tags/v3.10.0:b494f59, Oct  4 2021, 19:00:18) [MSC v.1929 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
使用的kubernetes版本:1.22.10-aliyun.1

在网上搜索的教程都是使用下面的方式获取ingress内容

# 获取ingress内容
# 参数说明:
# config_path:k8s集群token文件路径
# namespace:k8s namespace
# name:ingress名称
def get_ingress_content(config_path, namespace, name):
    # load k8s集群token信息
    config.load_kube_config(config_path)
    v1 = client.ExtensionsV1beta1Api()   # 注意,ingress的api不一样

    # 读取ingress
    ret = v1.read_namespaced_ingress(namespace=namespace, name=name)

报错

module 'kubernetes.client' has no attribute 'ExtensionsV1beta1Api'

但是在我使用的kubernetes:23.6.0的版本下面没有ExtensionsV1beta1Api这个函数,然后通过查看
官网的示例https://github.com/kubernetes-client/python/tree/master/kubernetes

新的写法是

from kubernetes import client, config

def get_namespace(): 
    apps_api = client.CoreV1Api()
    namespace_list=[]
    for namespace in apps_api.list_namespace().items:
        if namespace.metadata.name not in ["arms-prom","kube-node-lease","kube-public","kube-system"]: 
            # print(namespace.metadata.name)
            namespace_list.append(namespace.metadata.name)
    return namespace_list

def list_ingress(namespace_list):
    v1=client.NetworkingV1Api()
    # 获取ingress列表
    ingress_list = []
    for namespace in namespace_list:
        ret = v1.list_namespaced_ingress(namespace=namespace)
        print(ret)
        # ret._items[0]._spec['rules']
        for item in ret._items:
            # print(type(item.metadata))
            for rule in item._spec.rules:
                ingress_list.append(rule.host)
    return ingress_list
 if __name__ == '__main__':
    config.load_kube_config(r'/root/.kube/config')   # 加载config文件,用于访问k8s
    namespace_list=get_namespace()
    #获取所有Ingress域名
    ingress_list=list_ingress(namespace_list)

上面只是我针对这个问题的解决方案,原则上不仅仅只是可以获取域名,所有的ingress的信息都可以获取,如果有更方便的解决方式可以与我联系,一起讨论一下,与君共勉!

你可能感兴趣的:(故障解决,kubernetes,python,运维)