Pisa-Controller admission webhooks 和 kube-apiserver 通信需要使用 https 协议,我们需要对我们的 https 服务进行证书配置。
执行webhook-create-signed-cert.sh ,脚本中会生成自签名证书,并生成对应的csr ,从csr中获取token作为apiserver-server 的交互证书。
namespace: default,如果要更改 namespace,请修改 webhook-create-signed-cert.sh 中 namespace=default ,将 default 更换为您的 namespace
脚本会安装下列资源对象
./webhook-create-signed-cert.sh
使用 kubectl 中的 ca 证书替换 mutatingwebhook.yaml 中的 caBundle 字段,如果您在1.1中修改过 namespace ,请将 mutatingwebhook.yaml.tpl 文件中的 namespace: default 字段改成您的namespace,MutatingWebhookConfiguration 自身没有 namespace 限制
此步骤将安装下列资源对象
cat deploy/mutatingwebhook.yaml.tpl | ./tool/cert/webhook-patch-ca-bundle.sh > ./deploy/mutatingwebhook.yaml
kubectl apply -f ./deploy/mutatingwebhook.yaml
Pisa-Proxy 通过 http 和控制面进行交互以获取启动配置文件。配置文件以 CRD 形式保存在 Kubernetes 集群中。
此步骤将安装下列资源对象
kubectl apply -f networking.pisanix.io_proxyconfigs.yaml
在上文中我们已经完成了在 kuebrnetes 集群中对于 Pisa-Controller admission webhooks 的相关定义配置,还有 Pisa-Proxy 配置 CRD 的应用,本章节将介绍如何部署 Pisa-Controller 服务
此阶段所有资源对象都有 namespace 限制,如需更改 namespace ,请在 kubectl 命令后跟上 -n ${your namespace}
Pisa-Controller 需要对pod 进行注入,所以需要申请对于pod资源的相关权限。Pisa-Controller 同时需要对 networking.pisanix.io 这个CRD进行操作,用来下发 Pisa-Proxy 的配置文件。
Yaml 中将部署下列资源
kubectl apply -f rbac.yaml
Service 是 Pisa-Controller admission webhooks 对外暴露服务的方式,Pisa-Controller 将暴露三个端口:80,6443,8080
Yaml 中将部署下列资源
kubectl apply -f service.yaml
Pisa-Controller 使用 Deployment 形式进行部署,并且以 Service 方式进行暴露。
Yaml 中将部署下列资源
kubectl apply -f deployment.yaml
Pisa-Controller admission webhooks 通过条件限定进行 Sidecar 注入
注入条件为,label 对象中包含
pisanix.io/inject: enabled
现阶段条件为
namespace | pod | 注入 |
---|---|---|
labeled | labeled | yes |
labeled | no | no |
no | no | no |
no | labeled | no |
下列资源对象将创建如下对象
kubectl apply -f sample.yaml
期望结果为 Pod 中包含 Pisa-Proxy Sidecar 镜像
Pisa-Proxy 支持从配置文件和 remote API 获取配置。Pisa-Proxy 默认从 remote API 获取配置,若需要从本地文件加载配置需要导出 LOCAL_CONFIG=true
环境变量,并通过 -c,--config
参数指定配置文件路径。若不指定,默认从 ./etc/config.toml
文件中进行加载。pisa-proxy 支持通过命令行参数和环境变量进行服务启动配置。配置详解如下:
./pisa-proxy -h
Pisa-Proxy
USAGE:
pisa-proxy [OPTIONS]
OPTIONS:
-c, --config <config> Config path # 指定配置文件路径
-h, --help Print help information # 查看使用帮助
--log-level <loglevel> Log level # 指定日志级别
-p, --port <port> Http port # 指定 api 端口号
环境变量包括如下:
-c, --config
参数# api 配置块,对应命令行参数和环境变量
[admin]
# api 端口
port = "8081"
# 日志级别
log_level = "INFO"
# pisa-proxy 代理配置块
[proxy]
# config a proxy
[[proxy.configs]]
# proxy 代理地址
listen_addr = "0.0.0.0:9088"
# proxy 认证用户名
username = "root"
# proxy 认证密码
password = "12345678"
# proxy schema
db = "test"
# 配置后端数据源类型
backend_type = "mysql"
# proxy 与后端数据库建连连接池大小,值范围:1 ~ 255, 默认值:64
pool_size = 3
# 后端负载均衡配置
[proxy.configs.simple_loadbalancer]
# 负载均衡算法:[random/roundrobin], 默认值: random 算法
balancer_type = "random"
# 选择挂载后端节点
nodes = ["ds001"]
# 后端数据源配置
[mysql]
[[mysql.nodes]]
# 数据源 name
name = "ds001"
# database name
db = ""
# 数据库 user
user = "root"
# 数据库 password
password = "root"
# 数据库地址
addr = "127.0.0.1:3307"
# 负载均衡节点权重
weight = 1
[admin]
port = "8081"
log_level = "INFO"
[proxy]
[[proxy.configs]]
listen_addr = "0.0.0.0:9088"
username = "root"
password = "12345678"
db = "test"
backend_type = "mysql"
pool_size = 3
[proxy.configs.simple_loadbalancer]
balancer_type = "random"
nodes = ["ds001"]
[proxy]
[[proxy.configs]]
listen_addr = "0.0.0.0:9089"
username = "root"
password = "root"
db = "test"
backend_type = "mysql"
pool_size = 3
[proxy.configs.simple_loadbalancer]
balancer_type = "random"
nodes = ["ds001"]
[mysql]
[[mysql.nodes]]
name = "ds001"
db = "test"
user = "root"
password = "root"
addr = "127.0.0.1:3307"
weight = 1
[proxy]
[[proxy.configs]]
listen_addr = "0.0.0.0:9089"
username = "root"
password = "root"
db = "test"
backend_type = "mysql"
pool_size = 3
[proxy.configs.simple_loadbalancer]
balancer_type = "random"
nodes = ["ds001", "ds002"]
[mysql]
[[mysql.nodes]]
name = "ds001"
db = "test"
user = "root"
password = "root"
addr = "127.0.0.1:3307"
weight = 1
[[mysql.nodes]]
name = "ds002"
db = "test"
user = "root"
password = "root"
addr = "127.0.0.1:3308"
weight = 2