Tips

自定义指标前缀

istio 没有将所有的配置项都释放出来,因此我们可以通过 EnvoyFilter 这个 CRD 进行操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
kind: EnvoyFilter
apiVersion: networking.istio.io/v1alpha3
metadata:
annotations:
name: mysql-stats-settings
namespace: wordpress
spec:
configPatches:
- applyTo: NETWORK_FILTER
match:
context: ANY
listener:
filterChain:
filter:
name: envoy.filters.network.mysql_proxy
patch:
operation: MERGE
value:
typed_config:
"@type": "type.googleapis.com/envoy.extensions.filters.network.mysql_proxy.v3.MySQLProxy"
stat_prefix: egress_mysql

Envoy 指标对外暴露

istio 没有将所有的指标对外暴露,因此需要额外配置: envoy-stats

1
$ kubectl edit configmaps -n istio-system istio

Read More

Gist

为Kube Object增加Type信息

因为 Client-GO 返回的 TypeMeta 永远为 Null,因此需要自己添加

addTypeInformationToObjectsource_code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
func addTypeInformationToObject(obj runtime.Object) error {
gvks, _, err := scheme.Scheme.ObjectKinds(obj)
if err != nil {
return fmt.Errorf("missing apiVersion or kind and cannot assign it; %w", err)
}

for _, gvk := range gvks {
if len(gvk.Kind) == 0 {
continue
}
if len(gvk.Version) == 0 || gvk.Version == runtime.APIVersionInternal {
continue
}
obj.GetObjectKind().SetGroupVersionKind(gvk)
break
}

return nil
}

搭建 Istio 开发测试环境

Pilot Discovery

构建

1
2
3
4
5
6

# 下载,检出版本
git clone https://github.com/istio/istio.git && cd istio && git checkout <YOUR_WANT_ISTIO>

# 构建
go build pilot/cmd/pilot-discovery

运行

为了让我们在本地开发测试 Pilot,首先准备好 kube-config

启动 poilot

1
pilot-discovery discovery --kubeconfig ~/.kube/config <默认配置>

Read More

为 QEMU 配置网桥上网

工具安装

1
2
apt-get install bridge-utils        # 虚拟网桥工具
apt-get install uml-utilities # UML(User-mode linux)工具

配置网桥

1
2
3
4
5
6
7
8
9
10
11
ifconfig <你的网卡名称(能上网的那张)> down    # 首先关闭宿主机网卡接口
brctl addbr br0 # 添加一座名为 br0 的网桥
brctl addif br0 <你的网卡名称> # 在 br0 中添加一个接口
brctl stp br0 off # 如果只有一个网桥,则关闭生成树协议
brctl setfd br0 1 # 设置 br0 的转发延迟
brctl sethello br0 1 # 设置 br0 的 hello 时间
ifconfig br0 0.0.0.0 promisc up # 启用 br0 接口
ifconfig <你的网卡名称> 0.0.0.0 promisc up # 启用网卡接口
dhclient br0 # 从 dhcp 服务器获得 br0 的 IP 地址
brctl show br0 # 查看虚拟网桥列表
brctl showstp br0 # 查看 br0 的各接口信息

创建 TAP

1
2
3
4
tunctl -t tap0 -u <YOUR_ACCOUNT>              # 创建一个 tap0 接口,只允许 XXX 用户访问
brctl addif br0 tap0 # 在虚拟网桥中增加一个 tap0 接口
ifconfig tap0 0.0.0.0 promisc up # 启用 tap0 接口
brctl showstp br0 # 显示 br0 的各个接口

Read More