79 lines
2.4 KiB
Python
79 lines
2.4 KiB
Python
'''
|
||
Author: Logan.Li
|
||
Gitee: https://gitee.com/attacker
|
||
email: admin@attacker.club
|
||
Date: 2025-01-05 12:25:52
|
||
LastEditTime: 2025-01-05 15:28:03
|
||
Description:
|
||
pip install kubernetes
|
||
'''
|
||
|
||
'''
|
||
导出ingress 配置信息
|
||
'''
|
||
from kubernetes import client, config
|
||
import os
|
||
import yaml
|
||
|
||
# 禁用不安全请求警告
|
||
import urllib3
|
||
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
|
||
|
||
# 创建API客户端
|
||
config.load_kube_config()
|
||
api_client = client.ApiClient()
|
||
|
||
|
||
def sanitize(obj):
|
||
# 获取原始对象的apiVersion和kind字段
|
||
api_version = getattr(obj, 'api_version', None)
|
||
kind = getattr(obj, 'kind', None)
|
||
|
||
obj_yaml = api_client.sanitize_for_serialization(obj)
|
||
|
||
# 如果apiVersion或kind为空,则使用默认值
|
||
obj_yaml['apiVersion'] = api_version or 'networking.k8s.io/v1' # 对于Ingress
|
||
obj_yaml['kind'] = kind or 'Ingress'
|
||
|
||
# 删除不需要的字段
|
||
if 'selfLink' in obj_yaml['metadata']:
|
||
del obj_yaml['metadata']['selfLink']
|
||
if 'generation' in obj_yaml['metadata']:
|
||
del obj_yaml['metadata']['generation']
|
||
del obj_yaml['metadata']['creationTimestamp']
|
||
del obj_yaml['metadata']['resourceVersion']
|
||
del obj_yaml['metadata']['uid']
|
||
del obj_yaml['status']
|
||
if 'managedFields' in obj_yaml['metadata']:
|
||
del obj_yaml['metadata']['managedFields']
|
||
|
||
# 清空 annotations 和 labels 字段
|
||
obj_yaml['metadata'].setdefault('annotations', {})
|
||
obj_yaml['metadata'].setdefault('labels', {})
|
||
|
||
# 移除不需要的注解
|
||
if 'kubectl.kubernetes.io/last-applied-configuration' in obj_yaml['metadata']['annotations']:
|
||
del obj_yaml['metadata']['annotations']['kubectl.kubernetes.io/last-applied-configuration']
|
||
|
||
return obj_yaml
|
||
|
||
|
||
def export_ingress(ingress, namespace):
|
||
ingress_yaml = sanitize(ingress)
|
||
|
||
# 生成YAML文件
|
||
yaml_file = f"{ingress.metadata.name}-ingress.yaml"
|
||
dir_path = os.path.join(os.getcwd(), namespace)
|
||
if not os.path.exists(dir_path):
|
||
os.makedirs(dir_path) # 使用makedirs以递归创建目录
|
||
with open(os.path.join(dir_path, yaml_file), 'w') as f:
|
||
yaml.dump(ingress_yaml, f, default_flow_style=False)
|
||
print(f"{yaml_file} created in {namespace} directory.")
|
||
|
||
|
||
# 获取所有Ingress
|
||
ingresses = client.NetworkingV1Api(api_client).list_ingress_for_all_namespaces(watch=False)
|
||
|
||
# 遍历所有Ingress资源并导出
|
||
for ingress in ingresses.items:
|
||
export_ingress(ingress, ingress.metadata.namespace) |