mirror of
https://github.com/gravitl/netmaker.git
synced 2025-09-13 08:34:44 +08:00
initial PoC completed
This commit is contained in:
parent
75fc15ac4c
commit
b95f3eb846
6 changed files with 30 additions and 24 deletions
|
@ -754,10 +754,15 @@ func deleteEgressGateway(w http.ResponseWriter, r *http.Request) {
|
|||
func createIngressGateway(w http.ResponseWriter, r *http.Request) {
|
||||
var params = mux.Vars(r)
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
failover := r.Header.Get("failover") == "yes"
|
||||
nodeid := params["nodeid"]
|
||||
netid := params["network"]
|
||||
node, err := logic.CreateIngressGateway(netid, nodeid, failover)
|
||||
type failoverData struct {
|
||||
Failover bool `json:"failover"`
|
||||
}
|
||||
var failoverReqBody failoverData
|
||||
json.NewDecoder(r.Body).Decode(&failoverReqBody)
|
||||
|
||||
node, err := logic.CreateIngressGateway(netid, nodeid, failoverReqBody.Failover)
|
||||
if err != nil {
|
||||
logger.Log(0, r.Header.Get("user"),
|
||||
fmt.Sprintf("failed to create ingress gateway on node [%s] on network [%s]: %v",
|
||||
|
|
|
@ -63,19 +63,12 @@ func determineFailoverCandidate(nodeToBeRelayed *models.Node) *models.Node {
|
|||
}
|
||||
}
|
||||
|
||||
if fastestCandidate == nil {
|
||||
leader, err := logic.GetNetworkServerLeader(nodeToBeRelayed.Network)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
return &leader
|
||||
}
|
||||
|
||||
return fastestCandidate
|
||||
}
|
||||
|
||||
// setFailoverNode - changes node's failover node
|
||||
func setFailoverNode(failoverNode, node *models.Node) error {
|
||||
|
||||
node.FailoverNode = failoverNode.ID
|
||||
nodeToUpdate, err := logic.GetNodeByID(node.ID)
|
||||
if err != nil {
|
||||
|
|
|
@ -10,6 +10,7 @@ import (
|
|||
"github.com/gravitl/netmaker/database"
|
||||
"github.com/gravitl/netmaker/logger"
|
||||
"github.com/gravitl/netmaker/models"
|
||||
"github.com/gravitl/netmaker/servercfg"
|
||||
)
|
||||
|
||||
// CreateEgressGateway - creates an egress gateway
|
||||
|
@ -224,9 +225,9 @@ func CreateIngressGateway(netid string, nodeid string, failover bool) (models.No
|
|||
node.PostUp = postUpCmd
|
||||
node.PostDown = postDownCmd
|
||||
node.UDPHolePunch = "no"
|
||||
// if failover && servercfg.Is_EE {
|
||||
// node.Failover = "yes"
|
||||
// }
|
||||
if failover && servercfg.Is_EE {
|
||||
node.Failover = "yes"
|
||||
}
|
||||
data, err := json.Marshal(&node)
|
||||
if err != nil {
|
||||
return models.Node{}, err
|
||||
|
@ -260,7 +261,7 @@ func DeleteIngressGateway(networkName string, nodeid string) (models.Node, error
|
|||
node.LastModified = time.Now().Unix()
|
||||
node.IsIngressGateway = "no"
|
||||
node.IngressGatewayRange = ""
|
||||
node.Failover = ""
|
||||
node.Failover = "no"
|
||||
|
||||
// default to removing postup and postdown
|
||||
node.PostUp = ""
|
||||
|
|
|
@ -37,6 +37,9 @@ func GetPeerUpdate(node *models.Node) (models.PeerUpdate, error) {
|
|||
if servercfg.Is_EE {
|
||||
metrics, _ = GetMetrics(node.ID)
|
||||
}
|
||||
if metrics == nil {
|
||||
metrics = &models.Metrics{}
|
||||
}
|
||||
if metrics.FailoverPeers == nil {
|
||||
metrics.FailoverPeers = make(map[string]string)
|
||||
}
|
||||
|
@ -94,6 +97,7 @@ func GetPeerUpdate(node *models.Node) (models.PeerUpdate, error) {
|
|||
}
|
||||
if len(metrics.FailoverPeers[peer.ID]) > 0 {
|
||||
logger.Log(0, "peer", peer.Name, peer.PrimaryAddress(), "was found to be in failover peers list for node", node.Name, node.PrimaryAddress())
|
||||
continue
|
||||
}
|
||||
pubkey, err := wgtypes.ParseKey(peer.PublicKey)
|
||||
if err != nil {
|
||||
|
@ -147,7 +151,7 @@ func GetPeerUpdate(node *models.Node) (models.PeerUpdate, error) {
|
|||
return models.PeerUpdate{}, err
|
||||
}
|
||||
}
|
||||
// set_allowedips
|
||||
|
||||
allowedips := GetAllowedIPs(node, &peer, metrics)
|
||||
var keepalive time.Duration
|
||||
if node.PersistentKeepalive != 0 {
|
||||
|
@ -258,7 +262,6 @@ func getExtPeers(node *models.Node) ([]wgtypes.PeerConfig, []models.IDandAddr, e
|
|||
// GetAllowedIPs - calculates the wireguard allowedip field for a peer of a node based on the peer and node settings
|
||||
func GetAllowedIPs(node, peer *models.Node, metrics *models.Metrics) []net.IPNet {
|
||||
var allowedips []net.IPNet
|
||||
|
||||
allowedips = getNodeAllowedIPs(peer, node)
|
||||
|
||||
// handle ingress gateway peers
|
||||
|
@ -272,16 +275,16 @@ func GetAllowedIPs(node, peer *models.Node, metrics *models.Metrics) []net.IPNet
|
|||
}
|
||||
// if node is a failover node, add allowed ips from nodes it is handling
|
||||
if peer.Failover == "yes" && metrics.FailoverPeers != nil {
|
||||
// travers through nodes that need handling
|
||||
for k, v := range metrics.FailoverPeers {
|
||||
// traverse through nodes that need handling
|
||||
logger.Log(3, "peer", peer.Name, "was found to be failover for", node.Name, "checking failover peers...")
|
||||
for k := range metrics.FailoverPeers {
|
||||
// if FailoverNode is me for this node, add allowedips
|
||||
if v == peer.ID {
|
||||
if metrics.FailoverPeers[k] == peer.ID {
|
||||
// get original node so we can traverse the allowed ips
|
||||
nodeToFailover, err := GetNodeByID(k)
|
||||
if err == nil {
|
||||
// get all allowedips and append
|
||||
// allowedips = append(allowedips, getNodeAllowedIPs(&nodeToFailover, peer)...)
|
||||
logger.Log(0, "failing over node", nodeToFailover.Name, nodeToFailover.PrimaryAddress())
|
||||
allowedips = append(allowedips, getNodeAllowedIPs(&nodeToFailover, peer)...)
|
||||
logger.Log(0, "failing over node", nodeToFailover.Name, nodeToFailover.PrimaryAddress(), "to failover node", peer.Name)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -266,6 +266,12 @@ func updateNodeMetrics(currentNode *models.Node, newMetrics *models.Metrics) {
|
|||
}
|
||||
}
|
||||
|
||||
for k, v := range oldMetrics.FailoverPeers {
|
||||
if len(v) > 0 && len(newMetrics.FailoverPeers[k]) == 0 {
|
||||
newMetrics.FailoverPeers[k] = v
|
||||
}
|
||||
}
|
||||
|
||||
for k := range oldMetrics.Connectivity { // cleanup any left over data, self healing
|
||||
delete(newMetrics.Connectivity, k)
|
||||
}
|
||||
|
|
|
@ -217,9 +217,7 @@ func collectServerMetrics(networks []models.Network) {
|
|||
logger.Log(2, "failed to push server metrics to exporter: ", err.Error())
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue