client-go 实现一个自动创建ingress资源的controller

需求:

创建的service annotaion中如果包含ingress/http: "true"的时候,会自动将该服务的ingress资源创建出来,当删除掉ingress/http: "true"的时候,自动删除ingress, 同时将service删除掉的时候也会自动删除ingress

main.go

Go 复制代码
package main

import (
	"ingress-expose/pkg"
	"k8s.io/client-go/informers"
	"k8s.io/client-go/kubernetes"
	"k8s.io/client-go/rest"
	"k8s.io/client-go/tools/clientcmd"
	"log"
)

func main() {
	//1. config

	// 从集群外部创建一个cofnig
	config, err := clientcmd.BuildConfigFromFlags("", clientcmd.RecommendedHomeFile)
	if err != nil {
		// 从集群内部创建一个config
		inClusterConfig, err := rest.InClusterConfig()
		if err != nil {
			log.Fatalln("can't get config")
		}
		config = inClusterConfig
	}

	//2. create client
	clientSet, err := kubernetes.NewForConfig(config)
	if err != nil {
		log.Fatalln("can't create clientSet")
	}

	//3. create informer
	factory := informers.NewSharedInformerFactory(clientSet, 0)
	serviceInformer := factory.Core().V1().Services()
	ingressInformer := factory.Networking().V1().Ingresses()

	//4. add event handler
	controller := pkg.NewController(clientSet, serviceInformer, ingressInformer)

	//5.informer.Start
	stopCh := make(chan struct{})
	factory.Start(stopCh)
	factory.WaitForCacheSync(stopCh)
	controller.Run(stopCh)
}

controller.go

Go 复制代码
package main

import (
	"ingress-expose/pkg"
	"k8s.io/client-go/informers"
	"k8s.io/client-go/kubernetes"
	"k8s.io/client-go/rest"
	"k8s.io/client-go/tools/clientcmd"
	"log"
)

func main() {
	//1. config

	// 从集群外部创建一个cofnig
	config, err := clientcmd.BuildConfigFromFlags("", clientcmd.RecommendedHomeFile)
	if err != nil {
		// 从集群内部创建一个config
		inClusterConfig, err := rest.InClusterConfig()
		if err != nil {
			log.Fatalln("can't get config")
		}
		config = inClusterConfig
	}

	//2. create client
	clientSet, err := kubernetes.NewForConfig(config)
	if err != nil {
		log.Fatalln("can't create clientSet")
	}

	//3. create informer
	factory := informers.NewSharedInformerFactory(clientSet, 0)
	serviceInformer := factory.Core().V1().Services()
	ingressInformer := factory.Networking().V1().Ingresses()

	//4. add event handler
	controller := pkg.NewController(clientSet, serviceInformer, ingressInformer)

	//5.informer.Start
	stopCh := make(chan struct{})
	factory.Start(stopCh)
	factory.WaitForCacheSync(stopCh)
	controller.Run(stopCh)
}
相关推荐
普通人64 小时前
WebGL与WebGPU入门指南
开发语言·webgl·1024程序员节
猫猫不是喵喵.21 小时前
从0到1创建一个微服务项目
java·数据库·微服务·1024程序员节
fish_zzzz4 天前
笔记-论数据结构2
1024程序员节
普通人65 天前
PHP文件读写完全指南
开发语言·php·1024程序员节
Martina_03215 天前
AI生成3D场景从白模换成精模后镜头全偏了?用6步检查单位、枢轴与层级替换
图像处理·人工智能·3d·ai·自然语言处理·材质·1024程序员节
星云_byto6 天前
CSS布局
人工智能·机器学习·目标跟踪·1024程序员节
张小姐的猫9 天前
【MySQL】访问 & 数据流动原理
android·数据库·mysql·adb·1024程序员节
工业HMI实战笔记10 天前
印刷电路板HMI:SMT贴装的元件定位界面
制造·设计规范·设计语言·1024程序员节
Martina_032110 天前
AI生成3D模型一合并网格,材质就串色?用6步检查材质槽、UV与图集重映射
图像处理·人工智能·3d·材质·uv·游戏策划·1024程序员节
橙光成长10 天前
android-ad-cleaner:android免 Root 批量关闭系统开屏与营销推送
android·1024程序员节