mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-23 11:50:44 +00:00
Merge pull request #73721 from frapposelli/fix-vsphere-ip-patch
Fix MAC filtering in vSphere cloud provider
This commit is contained in:
commit
7788606ec6
@ -53,8 +53,6 @@ const (
|
||||
VolDir = "kubevols"
|
||||
RoundTripperDefaultCount = 3
|
||||
DummyVMPrefixName = "vsphere-k8s"
|
||||
MacOuiVC = "00:50:56"
|
||||
MacOuiEsx = "00:0c:29"
|
||||
CleanUpDummyVMRoutineInterval = 5
|
||||
)
|
||||
|
||||
@ -533,6 +531,15 @@ func (vs *VSphere) Instances() (cloudprovider.Instances, bool) {
|
||||
}
|
||||
|
||||
func getLocalIP() ([]v1.NodeAddress, error) {
|
||||
// hashtable with VMware-allocated OUIs for MAC filtering
|
||||
// List of official OUIs: http://standards-oui.ieee.org/oui.txt
|
||||
vmwareOUI := map[string]bool{
|
||||
"00:05:69": true,
|
||||
"00:0c:29": true,
|
||||
"00:1c:14": true,
|
||||
"00:50:56": true,
|
||||
}
|
||||
|
||||
addrs := []v1.NodeAddress{}
|
||||
ifaces, err := net.Interfaces()
|
||||
if err != nil {
|
||||
@ -548,9 +555,12 @@ func getLocalIP() ([]v1.NodeAddress, error) {
|
||||
if ipnet, ok := addr.(*net.IPNet); ok && !ipnet.IP.IsLoopback() {
|
||||
if ipnet.IP.To4() != nil {
|
||||
// Filter external IP by MAC address OUIs from vCenter and from ESX
|
||||
var addressType v1.NodeAddressType
|
||||
if strings.HasPrefix(i.HardwareAddr.String(), MacOuiVC) ||
|
||||
strings.HasPrefix(i.HardwareAddr.String(), MacOuiEsx) {
|
||||
vmMACAddr := strings.ToLower(i.HardwareAddr.String())
|
||||
// Making sure that the MAC address is long enough
|
||||
if len(vmMACAddr) < 17 {
|
||||
return addrs, fmt.Errorf("MAC address %q is invalid", vmMACAddr)
|
||||
}
|
||||
if vmwareOUI[vmMACAddr[:8]] {
|
||||
nodehelpers.AddToNodeAddresses(&addrs,
|
||||
v1.NodeAddress{
|
||||
Type: v1.NodeExternalIP,
|
||||
@ -561,8 +571,10 @@ func getLocalIP() ([]v1.NodeAddress, error) {
|
||||
Address: ipnet.IP.String(),
|
||||
},
|
||||
)
|
||||
klog.V(4).Infof("Detected local IP address as %q", ipnet.IP.String())
|
||||
} else {
|
||||
klog.Warningf("Failed to patch IP as MAC address %q does not belong to a VMware platform", vmMACAddr)
|
||||
}
|
||||
klog.V(4).Infof("Find local IP address %v and set type to %v", ipnet.IP.String(), addressType)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user