Skip to content

Commit 4ce8e10

Browse files
authored
fix: AIT-50130, support multi addresses (#13)
Signed-off-by: tfwang <[email protected]>
1 parent 6601996 commit 4ce8e10

File tree

3 files changed

+47
-14
lines changed

3 files changed

+47
-14
lines changed

pkg/app/app.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ func (a *App) runCommand(cmd *cobra.Command, args []string) {
158158
}
159159
}
160160

161-
err := a.server.Start()
161+
err := a.server.Start(cmd.Context())
162162
if err != nil {
163163
printError(err)
164164
os.Exit(1)

pkg/server/options/server.go

+7-2
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package options
33
import (
44
"fmt"
55
"net"
6+
"strings"
67

78
"github.com/alauda/registry-auth/pkg/server"
89
"github.com/alauda/registry-auth/pkg/server/config"
@@ -53,8 +54,12 @@ func (o *ServerOptions) ApplyFlags() []error {
5354
var errs []error
5455

5556
o.BindAddress = viper.GetString(configServerBindAddress)
56-
if o.BindAddress != "" && net.ParseIP(o.BindAddress) == nil {
57-
errs = append(errs, fmt.Errorf("--%s must be IP", flagServerBindAddress))
57+
if o.BindAddress != "" {
58+
for _, ip := range strings.Split(o.BindAddress, ",") {
59+
if net.ParseIP(ip) == nil {
60+
errs = append(errs, fmt.Errorf("--%s %s must be IP", flagServerBindAddress, ip))
61+
}
62+
}
5863
}
5964

6065
o.Port = viper.GetInt(configServerPort)

pkg/server/server.go

+39-11
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ import (
1010
"net/url"
1111
"os"
1212
"os/signal"
13+
"strconv"
14+
"strings"
1315
"syscall"
1416
"time"
1517

@@ -171,8 +173,19 @@ func (s *Server) ApplyToServer() error {
171173
return nil
172174
}
173175

174-
func (s *Server) Start() error {
175-
addr := fmt.Sprintf("%s:%d", s.ServerConfig.BindAddress, s.ServerConfig.Port)
176+
func (s *Server) Start(ctx context.Context) error {
177+
var addrs []string
178+
if s.ServerConfig.BindAddress == "" {
179+
addrs = append(addrs, ":"+strconv.Itoa(s.ServerConfig.Port))
180+
} else {
181+
for _, addr := range strings.Split(s.ServerConfig.BindAddress, ",") {
182+
if ip := net.ParseIP(addr); ip != nil && ip.To4() == nil {
183+
addr = "[" + addr + "]"
184+
}
185+
addrs = append(addrs, addr+":"+strconv.Itoa(s.ServerConfig.Port))
186+
}
187+
}
188+
176189
handler := s.Container()
177190

178191
connState := func(conn net.Conn, state http.ConnState) {
@@ -194,7 +207,6 @@ func (s *Server) Start() error {
194207
}
195208

196209
if s.ServerConfig.TLSCertFile != "" && s.ServerConfig.TLSKeyFile != "" {
197-
198210
cert, err := tls.LoadX509KeyPair(s.ServerConfig.TLSCertFile, s.ServerConfig.TLSKeyFile)
199211
if err != nil {
200212
return err
@@ -212,15 +224,31 @@ func (s *Server) Start() error {
212224
MinVersion: tls.VersionTLS12,
213225
Certificates: []tls.Certificate{cert},
214226
}
227+
for _, addr := range addrs {
228+
go func(addr string) {
229+
listener, err := tls.Listen("tcp", addr, &config)
230+
if err != nil {
231+
logger.Fatal(fmt.Sprintf("failed to listen %s, err: %v", addr, err), zap.String("func", "Start"))
232+
return
233+
}
215234

216-
listener, err := tls.Listen("tcp", addr, &config)
217-
if err != nil {
218-
return err
235+
srv := http.Server{Handler: handler, ConnState: connState}
236+
if err := srv.Serve(listener); err != nil {
237+
logger.Fatal(fmt.Sprintf("failed to serve at %s, err: %v", addr, err), zap.String("func", "Start"))
238+
}
239+
}(addr)
240+
}
241+
} else {
242+
for _, addr := range addrs {
243+
go func(addr string) {
244+
srv := http.Server{Addr: addr, Handler: handler, ConnState: connState}
245+
if err := srv.ListenAndServe(); err != nil {
246+
logger.Fatal(fmt.Sprintf("failed to listen and serve at %s, err: %v", addr, err), zap.String("func", "Start"))
247+
}
248+
}(addr)
219249
}
220-
221-
srv := http.Server{Handler: handler, ConnState: connState}
222-
return srv.Serve(listener)
223250
}
224-
srv := http.Server{Addr: addr, Handler: handler, ConnState: connState}
225-
return srv.ListenAndServe()
251+
252+
<-ctx.Done()
253+
return nil
226254
}

0 commit comments

Comments
 (0)