internal/system/ports.go (67 lines of code) (raw):
package system
import (
"fmt"
"go.uber.org/zap"
"github.com/aws/eks-hybrid/internal/api"
"github.com/aws/eks-hybrid/internal/firewall"
)
const (
portsAspectName = "ports"
kubeletServePort = "10250"
kubeProxyHealthzPort = "10256"
nodePortStartRangePort = "30000"
nodePortEndRangePort = "32767"
)
type portsAspect struct {
nodeConfig *api.NodeConfig
logger *zap.Logger
firewallManager firewall.Manager
}
var _ SystemAspect = &portsAspect{}
func NewPortsAspect(cfg *api.NodeConfig, logger *zap.Logger) SystemAspect {
return &portsAspect{
nodeConfig: cfg,
logger: logger,
firewallManager: NewFirewallManager(),
}
}
func NewFirewallManager() firewall.Manager {
osName := GetOsName()
if osName == UbuntuOsName {
return firewall.NewUncomplicatedFirewall()
}
return firewall.NewFirewalld()
}
func (s *portsAspect) Name() string {
return portsAspectName
}
func (s *portsAspect) Setup() error {
firewallEnabled, err := s.firewallManager.IsEnabled()
if err != nil {
s.logger.Warn("Failed to get firewall status", zap.Error(err))
s.logger.Info("Skip setting firewall rules")
return nil
}
if firewallEnabled {
s.logger.Info("Allowing port on firewall", zap.Reflect("kubelet-server-port", kubeletServePort))
if err = s.firewallManager.AllowTcpPort(kubeletServePort); err != nil {
return err
}
s.logger.Info("Allowing port on firewall", zap.Reflect("kube-proxy-port", kubeProxyHealthzPort))
if err = s.firewallManager.AllowTcpPort(kubeProxyHealthzPort); err != nil {
return err
}
s.logger.Info("Allowing port on firewall", zap.Reflect("node-port-services",
fmt.Sprintf("%s-%s", nodePortStartRangePort, nodePortEndRangePort)))
if err = s.firewallManager.AllowTcpPortRange(nodePortStartRangePort, nodePortEndRangePort); err != nil {
return err
}
s.logger.Info("Flushing firewall rules")
if err = s.firewallManager.FlushRules(); err != nil {
return err
}
} else {
s.logger.Info("No firewall enabled on the host. Skipping setting firewall rules...")
}
return nil
}