控制面集群不可达 #
准备至少两个集群才能做演示
可以是一个节点的集群或者 Kind 起的集群但最少也要两个
准备工作 #
初始化控制面集群 #
# 在控制面集群执行
ferryctl control-plane init --control-plane-reachable=false
--control-plane-reachable 指定控制面集群是否可达
加入数据面集群 #
向控制面集群声明哪个数据面集群需要加入 #
# 在控制面集群执行,预连接其他数据平集群
ferryctl control-plane join cluster-1 "--data-plane-tunnel-address=${HOST_IP}:31001" --control-plane-reachable=false
--data-plane-tunnel-address 指定对于控制面集群来说数据面集群 Tunnel 的地址
--control-plane-reachable 指定控制面集群是否可达
需要 握手
完成握手 #
然后可以在控制面集群查看这个数据面集群了
kubectl get hub.traffic.ferryproxy.io -n ferry-system
快速在本地拉起测试环境 #
如果你没有可以测试集群又想快速尝试可以按照下面的流程
要求: Docker, Kind, Go
git clone https://github.com/ferryproxy/ferry
go install ./cmd/ferryctl
./test/hack/start-environment.sh control-plane-unreachable
将会使用 Kind 启动两个集群, 并在控制面集群安装好 ferry-controller, 但是没有配置路由规则
在控制面集群配置路由规则
# 把 cluster-1 的 web-1.test.svc 映射到 control-plane 的 web-1.test.svc
# 把 control-plane 的 web-0.test.svc 映射到 cluster-1 的 web-0.test.svc
apiVersion: traffic.ferryproxy.io/v1alpha2
kind: RoutePolicy
metadata:
name: ferry-test
namespace: ferry-system
spec:
exports:
- hubName: cluster-1
service:
namespace: test
name: web-1
- hubName: control-plane
service:
namespace: test
name: web-0
imports:
- hubName: cluster-1
- hubName: control-plane
# 进入 control-plane 的容器里 去 请求 cluster-1 映射过来的 servuce
kubectl --context=kind-ferry-test-control-plane exec -it svc/web-0 -n test -- wget -O - web-1
# 进入 cluster-1 的容器里 去 请求 control-plane 映射过来的 servuce
kubectl --context=kind-ferry-test-cluster-1 exec -it svc/web-1 -n test -- wget -O - web-0