Use UDP dial to find default address for outbound traffic.

Set default bindAddr if it has not been explicitly provided be the user.
This commit is contained in:
Kelvin Clement Mwinuka
2023-07-29 01:33:33 +08:00
parent 67d8f9f047
commit d82a6a98d7
5 changed files with 33 additions and 9 deletions
-3
View File
@@ -11,7 +11,6 @@ services:
context: .
dockerfile: ./server/Dockerfile
environment:
- BINDADDR=0.0.0.0
- PORT=7480
- RAFTPORT=8000
- MLPORT=7946
@@ -31,7 +30,6 @@ services:
context: .
dockerfile: ./server/Dockerfile
environment:
- BINDADDR=0.0.0.0
- PORT=7480
- RAFTPORT=8000
- MLPORT=7946
@@ -52,7 +50,6 @@ services:
context: .
dockerfile: ./server/Dockerfile
environment:
- BINDADDR=0.0.0.0
- PORT=7480
- RAFTPORT=8000
- MLPORT=7946
+1 -1
View File
@@ -31,7 +31,7 @@ func GetConfig() Config {
http := flag.Bool("http", false, "Use HTTP protocol instead of raw TCP. Default is false")
serverId := flag.String("serverId", "1", "Server ID in raft cluster. Leave empty for client.")
joinAddr := flag.String("joinAddr", "", "Address of cluster member in a cluster to you want to join.")
bindAddr := flag.String("bindAddr", "127.0.0.1", "Address to bind the server to.")
bindAddr := flag.String("bindAddr", "", "Address to bind the server to.")
raftBindPort := flag.Int("raftPort", 7481, "Port to use for intra-cluster communication. Leave on the client.")
mlBindPort := flag.Int("mlPort", 7946, "Port to use for memberlist communication.")
config := flag.String(
+14 -4
View File
@@ -5,6 +5,7 @@ import (
"crypto/tls"
"fmt"
"io"
"log"
"net"
"net/http"
"os"
@@ -103,13 +104,13 @@ func (server *Server) StartTCP() {
fmt.Printf("Starting TLS server at Address %s, Port %d...\n", conf.BindAddr, conf.Port)
cer, err := tls.LoadX509KeyPair(conf.Cert, conf.Key)
if err != nil {
panic(err)
log.Fatal(err)
}
if l, err := tls.Listen("tcp", fmt.Sprintf("%s:%d", conf.BindAddr, conf.Port), &tls.Config{
Certificates: []tls.Certificate{cer},
}); err != nil {
panic(err)
log.Fatal(err)
} else {
listener = l
}
@@ -119,7 +120,7 @@ func (server *Server) StartTCP() {
// TCP
fmt.Printf("Starting TCP server at Address %s, Port %d...\n", conf.BindAddr, conf.Port)
if l, err := net.Listen("tcp", fmt.Sprintf("%s:%d", conf.BindAddr, conf.Port)); err != nil {
panic(err)
log.Fatal(err)
} else {
listener = l
}
@@ -170,7 +171,7 @@ func (server *Server) Start() {
}
server.MemberListInit()
// server.RaftInit()
server.RaftInit()
if conf.HTTP {
server.StartHTTP()
@@ -188,6 +189,15 @@ func (server *Server) ShutDown() {
func main() {
config := GetConfig()
// Default BindAddr if it's not set
if config.BindAddr == "" {
if addr, err := GetIPAddress(); err != nil {
log.Fatal(err)
} else {
config.BindAddr = addr
}
}
cancelCh := make(chan (os.Signal), 1)
signal.Notify(cancelCh, syscall.SIGINT, syscall.SIGTERM)
+3 -1
View File
@@ -15,6 +15,7 @@ func (server *Server) RaftInit() {
// Triggered after MemberList init
conf := server.config
fmt.Println(conf)
raftConfig := raft.DefaultConfig()
raftConfig.LocalID = raft.ServerID(conf.ServerID)
@@ -24,9 +25,10 @@ func (server *Server) RaftInit() {
raftSnapshotStore := raft.NewInmemSnapshotStore()
raftAddr := fmt.Sprintf("%s:%d", conf.BindAddr, conf.RaftBindPort)
raftAdvertiseAddr, err := net.ResolveTCPAddr("tcp", raftAddr)
if err != nil {
log.Fatal("Could not resolve advertise address.")
log.Fatal(err)
}
raftTransport, err := raft.NewTCPTransport(
+15
View File
@@ -8,6 +8,7 @@ import (
"fmt"
"math"
"math/big"
"net"
"reflect"
"strings"
"time"
@@ -188,3 +189,17 @@ func RetryBackoff(b retry.Backoff, maxRetries uint64, jitter, cappedDuration, ma
return backoff
}
func GetIPAddress() (string, error) {
conn, err := net.Dial("udp", "8.8.8.8:80")
if err != nil {
return "", err
}
defer conn.Close()
localAddr := strings.Split(conn.LocalAddr().String(), ":")[0]
return localAddr, nil
}