From e3e51731ac893dfc2bebd1e1f937b574abf271f7 Mon Sep 17 00:00:00 2001 From: Yousong Zhou Date: Wed, 24 Feb 2021 22:22:07 +0800 Subject: [PATCH 1/2] build: cloudproxy: add dockerfile --- build/docker/Dockerfile.cloudproxy | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 build/docker/Dockerfile.cloudproxy diff --git a/build/docker/Dockerfile.cloudproxy b/build/docker/Dockerfile.cloudproxy new file mode 100644 index 0000000000..8e22d321b8 --- /dev/null +++ b/build/docker/Dockerfile.cloudproxy @@ -0,0 +1,3 @@ +FROM registry.cn-beijing.aliyuncs.com/yunionio/onecloud-base:v0.2 + +ADD ./_output/alpine-build/bin/cloudproxy /opt/yunion/bin/cloudproxy From d9b3d3ee8584204c284e83700572b12806e9dfd7 Mon Sep 17 00:00:00 2001 From: Yousong Zhou Date: Fri, 26 Feb 2021 19:11:57 +0800 Subject: [PATCH 2/2] cloudproxy: agent: refresh bindAddr, advertiseAddr when needed --- pkg/cloudproxy/agent/worker/worker.go | 43 +++++++++++++++++++++------ 1 file changed, 34 insertions(+), 9 deletions(-) diff --git a/pkg/cloudproxy/agent/worker/worker.go b/pkg/cloudproxy/agent/worker/worker.go index 32effb402d..7a728110df 100644 --- a/pkg/cloudproxy/agent/worker/worker.go +++ b/pkg/cloudproxy/agent/worker/worker.go @@ -21,6 +21,8 @@ import ( "sync" "time" + "github.com/vishvananda/netlink" + "yunion.io/x/log" "yunion.io/x/pkg/errors" "yunion.io/x/pkg/utils" @@ -94,23 +96,46 @@ func (w *Worker) initProxyAgent_(ctx context.Context) error { w.proxyAgentId = agentDetail.Id } - var bindAddr = agentDetail.BindAddr - if bindAddr == "" { + bindAddrExist := func(addr string) bool { + as, err := netlink.AddrList(nil, netlink.FAMILY_ALL) + if err != nil { + log.Fatalf("list system available addresses: %v", err) + } + for _, a := range as { + ipstr := a.IPNet.IP.String() + if addr == ipstr { + return true + } + } + return false + } + + var ( + bindAddr string + advertiseAddr string + bindAddrUpdate = false + advertiseAddrUpdate = false + ) + if agentDetail.BindAddr == "" || !bindAddrExist(bindAddr) { var err error bindAddr, err = netutils2.MyIP() if err != nil { return errors.Wrap(err, "find bind Addr") } + bindAddrUpdate = true + } else { + bindAddr = agentDetail.BindAddr } w.bindAddr = bindAddr - if agentDetail.BindAddr == "" || agentDetail.AdvertiseAddr == "" { - var advertiseAddr = agentDetail.AdvertiseAddr - if advertiseAddr == "" { - if true { //TODO, fetch clusterIP from k8s environ - advertiseAddr = bindAddr - } - } + if agentDetail.AdvertiseAddr == "" || (bindAddrUpdate && agentDetail.AdvertiseAddr == agentDetail.BindAddr) { + advertiseAddr = bindAddr + advertiseAddrUpdate = true + } else { + advertiseAddr = agentDetail.AdvertiseAddr + } + + if bindAddrUpdate || advertiseAddrUpdate { req := api.ProxyAgentUpdateInput{ BindAddr: bindAddr, AdvertiseAddr: advertiseAddr,