值得一看
广告
彩虹云商城
广告

热门广告位

Golang Kubernetes Ingress路由管理示例

答案:使用Golang通过client-go库操作Kubernetes Ingress资源,可实现创建、查询和删除Ingress规则,适用于自动化路由管理。

golang kubernetes ingress路由管理示例

在 Kubernetes 中,Ingress 是管理外部访问集群内服务的重要方式,通常用于 HTTP/HTTPS 路由。使用 Golang 可以编写自定义控制器或工具来动态管理 Ingress 资源。下面是一个简单的示例,展示如何使用 Golang 操作 Kubernetes Ingress 资源。

环境准备与依赖引入

要操作 Kubernetes API,我们需要使用官方的 client-go 库。先初始化项目并添加依赖:


go mod init ingress-manager
go get k8s.io/client-go/kubernetes
go get k8s.io/client-go/rest
go get k8s.io/client-go/tools/clientcmd

确保你的 kubeconfig 文件位于 ~/.kube/config,或通过环境变量指定路径。

连接 Kubernetes 集群

使用以下代码连接到集群,支持 in-cluster 和本地开发模式:

立即学习“go语言免费学习笔记(深入)”;


package main
import (
“context”
“fmt”
“path/filepath”
“k8s.io/client-go/kubernetes”
“k8s.io/client-go/rest”
“k8s.io/client-go/tools/clientcmd”
“k8s.io/client-go/util/homedir”
)
func getKubernetesClient() (*kubernetes.Clientset, error) {
var config *rest.Config
var err error
// 尝试使用 in-cluster 配置(Pod 内运行)
config, err = rest.InClusterConfig()
if err != nil {
// 回退到本地 kubeconfig
home := homedir.HomeDir()
kubeconfig := filepath.Join(home, “.kube”, “config”)
config, err = clientcmd.BuildConfigFromFlags(“”, kubeconfig)
if err != nil {
return nil, err
}
}
return kubernetes.NewForConfig(config)
}

创建和管理 Ingress 资源

下面是一个创建简单 Ingress 的示例,将域名 example.com 映射到服务 my-service 的 80 端口:

乾坤圈新媒体矩阵管家

乾坤圈新媒体矩阵管家

新媒体账号、门店矩阵智能管理系统

乾坤圈新媒体矩阵管家17

查看详情
乾坤圈新媒体矩阵管家


import (
“context”
“time”
networkingv1 “k8s.io/api/networking/v1”
metav1 “k8s.io/apimachinery/pkg/apis/meta/v1”
)
func createIngress(client *kubernetes.Clientset) error {
ingress := &networkingv1.Ingress{
ObjectMeta: metav1.ObjectMeta{
Name: “example-ingress”,
Namespace: “default”,
Annotations: map[string]string{
“nginx.ingress.kubernetes.io/rewrite-target”: “/”,
},
},
Spec: networkingv1.IngressSpec{
IngressClassName: &[]string{“nginx”}[0],
Rules: []networkingv1.IngressRule{
{
Host: “example.com”,
IngressRuleValue: networkingv1.IngressRuleValue{
HTTP: &networkingv1.HTTPIngressRuleValue{
Paths: []networkingv1.HTTPIngressPath{
{
Path: “/”,
PathType: (*networkingv1.PathType)(pointer.StringPtr(“Prefix”)),
Backend: networkingv1.IngressBackend{
Service: &networkingv1.IngressServiceBackend{
Name: “my-service”,
Port: networkingv1.ServiceBackendPort{Number: 80},
},
},
},
},
},
},
},
},
},
}
_, err := client.NetworkingV1().Ingresses(“default”).Create(
context.TODO(),
ingress,
metav1.CreateOptions{},
)
return err
}
// 辅助函数:生成指针
func pointer(s string) *string { return &s }

调用方式:


func main() {
client, err := getKubernetesClient()
if err != nil {
panic(err)
}
if err := createIngress(client); err != nil {
panic(err)
}
fmt.Println(“Ingress 创建成功”)
}

查询和删除 Ingress

你可以通过 List 获取所有 Ingress,或 Get 获取特定资源:


// 列出 default 命名空间下的 Ingress
ingresses, err := client.NetworkingV1().Ingresses(“default”).List(
context.TODO(),
metav1.ListOptions{},
)
if err != nil {
panic(err)
}
for _, ing := range ingresses.Items {
fmt.Printf(“Host: %s, Name: %s\n”, ing.Spec.Rules[0].Host, ing.Name)
}
// 删除 Ingress
err = client.NetworkingV1().Ingresses(“default”).Delete(
context.TODO(),
“example-ingress”,
metav1.DeleteOptions{},
)
if err != nil {
panic(err)
}
fmt.Println(“Ingress 删除成功”)

基本上就这些。通过 Golang 结合 client-go,你可以实现自动化的 Ingress 管理,比如配合 CI/CD 动态更新路由、实现多租户子域名分配等场景。

相关标签:

go nginx golang 端口 工具 mac ai 路由 环境变量 gpt kubernetes .net golang nginx String if for 命名空间 Error printf 指针 Namespace var pointer nil map delete number default kubernetes http https 自动化

大家都在看:

Go 语言方法接收器:值与指针类型间的调用机制解析
理解Go语言中Map的参数传递:指针与值的选择
Go语言文件命名规范:下划线或点开头的源文件为何被构建工具忽略?
Go语言方法接收器:理解值与指针的自动转换与方法集规则
Go语言中高效读取大尺寸UTF-8字符串:使用bufio优化输入操作
温馨提示: 本文最后更新于2025-09-30 16:37:11,某些文章具有时效性,若有错误或已失效,请在下方留言或联系在线客服
文章版权声明 1 本网站名称: 创客网
2 本站永久网址:https://new.ie310.com
1 本文采用非商业性使用-相同方式共享 4.0 国际许可协议[CC BY-NC-SA]进行授权
2 本站所有内容仅供参考,分享出来是为了可以给大家提供新的思路。
3 互联网转载资源会有一些其他联系方式,请大家不要盲目相信,被骗本站概不负责!
4 本网站只做项目揭秘,无法一对一教学指导,每篇文章内都含项目全套的教程讲解,请仔细阅读。
5 本站分享的所有平台仅供展示,本站不对平台真实性负责,站长建议大家自己根据项目关键词自己选择平台。
6 因为文章发布时间和您阅读文章时间存在时间差,所以有些项目红利期可能已经过了,能不能赚钱需要自己判断。
7 本网站仅做资源分享,不做任何收益保障,创业公司上收费几百上千的项目我免费分享出来的,希望大家可以认真学习。
8 本站所有资料均来自互联网公开分享,并不代表本站立场,如不慎侵犯到您的版权利益,请联系79283999@qq.com删除。

本站资料仅供学习交流使用请勿商业运营,严禁从事违法,侵权等任何非法活动,否则后果自负!
THE END
喜欢就支持一下吧
点赞9赞赏 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容