https://firemiles-blog.oss-cn-shanghai.aliyuncs.com/blog-avator.png

Load Balance 访问 Kubernetes Pod 源 IP 保留方案探索

Kuberentes 已经成为云计算事实上的基础设施,各大云服务厂商都推出了自己的Kubernets 集群托管服务。处于信息安全考虑,一些企业不允许自己的核心资产暴露在公共服务器上,公有云并不适合他们。一些云服务厂商嗅到了其中的商机,国外大厂OpenShift,国内云厂商阿里云、华为云、青云等纷纷顺势推出了基于Kubernetes的私有集群以及混合云的解决方案。

企业在选型方案是,网络能力往往是考量各解决方案优劣的一个重要指标,但是本文并不打算分析各厂商的网络方案(工作量太大,计划后续补上),而是主要聚焦 Kubernetes 集群中的一个小的网络特性,即 Kubernetes Load Balance Service 如何保留客户端源IP。

Kubernetes API 开发(五)

添加一个新 API Version

如果你要为一个 Group 添加一个新的 API Version,你可以从 pkg/apis/<group>/<existing-version> copy 到 staging/src/k8s.io/api/<group>/<existing-version> 目录中。

由于项目在飞速迭代,以下的内容有可能已经过时:

Golang json 序列化

前言

这两天升级 client-go 版本,涉及 grpc proto 相关代码生成。升级完成后在调试的过程中,发现当数据存入etcd时,一个boolean类型的字段消失了,仔细研究了相关代码半天,最后才发现 go 在 Marshal 结构体时,如果字段是boolean类型,并且设置了omitempty,则会在false的事后作为empty删除。为了避免以后再次栽倒同样的坑里,特意写作本篇博客详细记录golang对json的处理。

Kubernetes API 开发(四)

生成代码

除了 default-gen, deepcopy-gen, conversion-gen, 和 openapi-gen 外,还有其他的生成器:

  • go-to-protobuf
  • client-gen
  • lister-gen
  • informer-gen
  • codecgen (使用 ugorji codec快速串行化json)

大部分生成器基于 gengo ,拥有相同的命令行选项。 --verify-only 会检查磁盘上的将要生成的文件。

生成器生成代码时有个 --go-header-file 选项,该选项指定包含生成代码头部内容的文件。头部内容一般是版权信息,放在生成代码的最前面,并且会被稍后的 repo-infra/verify/verify-boilerplane.sh 脚本检查。

执行 make update 会调用一系列脚本 包括以上的生成器。请继续阅读以下段落,因为某些生成器的使用需要一些先决条件,而且执行 make update 耗时太久,下面还会介绍如何单独调用生成器。