Kubernetes ImagePolicyWebhook与ValidatingAdmissionWebhook【4】main.go源码解析(2)

简介: Kubernetes ImagePolicyWebhook与ValidatingAdmissionWebhook【4】main.go源码解析(2)

2.2.2 config.colorer = color.New()代码中new()又如何理解呢?

它来自https://github.com/labstack/gommon/blob/master/color/color.go

1035234-20181020215539574-213176954.png

在New函数中,我们应当知道new函数的语法:func new(Type) *Type,内建函数 new 用来分配内存,第一个参数是一个类型,不是一个值,返回值是一个指向分配零值的指针。


在关于c的SetOutPut方法中,io.writer利用了流的读写,bytes.Buffer是一个可变字节的类型,可以让我们很容易的对字节进行操作,比如读写,追加等。bytes.Buffer实现了io.Writer接口,所以我么可以很容易的进行读写操作。

io的源码


os.File是打开文件

https://pkg.go.dev/os

1035234-20181020215539574-213176954.png

1035234-20181020215539574-213176954.png

如果文件描述符是terminal则返回true,c.disabled=true,表示如果不是终端,则不开启的标志,也就是LoggerWithConfig函数能用到颜色输出的地方,只有终端,当人打开去看的时候,如果是终端输出日志,就给输出特定的颜色。

2.2.3 sync.Pool又是什么?

通常用golang来构建高并发场景下的应用,但是由于golang内建的GC机制会影响应用的性能,为了减少GC,golang提供了对象重用的机制,也就是sync.Pool对象池。

具体细节参考这篇文章

2.3 白名单、证书、密钥的判断

回到main.go代码中来。

1035234-20181020215539574-213176954.png

  • 假如whitelist不为空,通过“,”分割,因为白名单仓库可能是多个的,然后打印输出
  • 如果whitelist为空,说明介绍所有的镜像仓库来源
  • 假如证书与密钥存在,开启https server
  • 假如证书与密钥不存在,开启http server

1035234-20181020215539574-213176954.png

最后,app.run(os.args)启动服务并显示文本。

1035234-20181020215539574-213176954.png

3. 总结

编写一个webhook,cli.v1可以帮助实现:


app.Name实现构建二进制的命令名字;

app.Usage描述使用方法;

app.Flags实现配置参数说明;

app.Action实现具体代码逻辑;

app.Run运行启动。

初次之外,echo,启动一个web客户端,并通过设定API接口实现具体逻辑。


handler目录写API接口的逻辑,主要包含获取需求的对象以及如何展示有用的对象信息。

rule目录写具体对获取的对象设定规则的逻辑。


相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
1天前
|
人工智能 Go 调度
掌握Go并发:Go语言并发编程深度解析
掌握Go并发:Go语言并发编程深度解析
|
1天前
|
XML 人工智能 Java
Spring Bean名称生成规则(含源码解析、自定义Spring Bean名称方式)
Spring Bean名称生成规则(含源码解析、自定义Spring Bean名称方式)
|
3天前
|
Rust 安全 程序员
Rust vs Go:解析两者的独特特性和适用场景
在讨论 Rust 与 Go 两种编程语言哪种更优秀时,我们将探讨它们在性能、简易性、安全性、功能、规模和并发处理等方面的比较。同时,我们看看它们有什么共同点和根本的差异。现在就来看看这个友好而公平的对比。
|
10天前
yolo-world 源码解析(六)(2)
yolo-world 源码解析(六)
19 0
|
10天前
yolo-world 源码解析(六)(1)
yolo-world 源码解析(六)
13 0
|
10天前
yolo-world 源码解析(五)(4)
yolo-world 源码解析(五)
22 0
|
10天前
yolo-world 源码解析(五)(1)
yolo-world 源码解析(五)
31 0
|
10天前
yolo-world 源码解析(二)(2)
yolo-world 源码解析(二)
21 0
|
10天前
Marker 源码解析(二)(3)
Marker 源码解析(二)
15 0

推荐镜像

更多