mirror of
https://github.com/kubevela/kubevela.git
synced 2026-02-14 18:10:21 +00:00
Fix: vela status will always get external ip first (#5014)
Signed-off-by: Qiaozp <qiaozhongpei.qzp@alibaba-inc.com> Signed-off-by: Qiaozp <qiaozhongpei.qzp@alibaba-inc.com>
This commit is contained in:
@@ -407,26 +407,10 @@ func selectorNodeIP(ctx context.Context, clusterName string, client client.Clien
|
||||
workerNodes = append(workerNodes, nodes.Items[i])
|
||||
}
|
||||
}
|
||||
if gatewayNode == nil && len(workerNodes) > 0 {
|
||||
gatewayNode = &workerNodes[0]
|
||||
}
|
||||
if gatewayNode == nil {
|
||||
gatewayNode = &nodes.Items[0]
|
||||
}
|
||||
if gatewayNode != nil {
|
||||
var addressMap = make(map[corev1.NodeAddressType]string)
|
||||
for _, address := range gatewayNode.Status.Addresses {
|
||||
addressMap[address.Type] = address.Address
|
||||
}
|
||||
// first get external ip
|
||||
if ip, exist := addressMap[corev1.NodeExternalIP]; exist {
|
||||
return ip
|
||||
}
|
||||
if ip, exist := addressMap[corev1.NodeInternalIP]; exist {
|
||||
return ip
|
||||
}
|
||||
return selectGatewayIP([]corev1.Node{*gatewayNode})
|
||||
}
|
||||
return ""
|
||||
return selectGatewayIP(workerNodes)
|
||||
}
|
||||
|
||||
// judgeAppProtocol RFC-6335 and http://www.iana.org/assignments/service-names).
|
||||
@@ -444,3 +428,23 @@ func judgeAppProtocol(port int32) string {
|
||||
return ""
|
||||
}
|
||||
}
|
||||
|
||||
// selectGatewayIP will choose one gateway IP from all nodes, it will pick up external IP first. If there isn't any, it will pick the first node's internal IP.
|
||||
func selectGatewayIP(nodes []corev1.Node) string {
|
||||
if len(nodes) == 0 {
|
||||
return ""
|
||||
}
|
||||
var addressMaps = make([]map[corev1.NodeAddressType]string, 0)
|
||||
for _, node := range nodes {
|
||||
var addressMap = make(map[corev1.NodeAddressType]string)
|
||||
for _, address := range node.Status.Addresses {
|
||||
addressMap[address.Type] = address.Address
|
||||
}
|
||||
// first get external ip
|
||||
if ip, exist := addressMap[corev1.NodeExternalIP]; exist {
|
||||
return ip
|
||||
}
|
||||
addressMaps = append(addressMaps, addressMap)
|
||||
}
|
||||
return addressMaps[0][corev1.NodeInternalIP]
|
||||
}
|
||||
|
||||
@@ -39,7 +39,7 @@ import (
|
||||
querytypes "github.com/oam-dev/kubevela/pkg/velaql/providers/query/types"
|
||||
)
|
||||
|
||||
var _ = Describe("Test Query Provider", func() {
|
||||
var _ = Describe("Test query endpoints", func() {
|
||||
|
||||
BeforeEach(func() {
|
||||
})
|
||||
@@ -268,5 +268,50 @@ var _ = Describe("Test Query Provider", func() {
|
||||
}
|
||||
Expect(edps).Should(BeEquivalentTo(urls))
|
||||
})
|
||||
|
||||
It("Test select gateway IP", func() {
|
||||
node1 := corev1.Node{
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
Name: "node-with-external-ip",
|
||||
},
|
||||
Status: corev1.NodeStatus{
|
||||
Addresses: []corev1.NodeAddress{
|
||||
{Type: corev1.NodeExternalIP, Address: "node1-external-ip"},
|
||||
{Type: corev1.NodeInternalIP, Address: "node1-internal-ip"},
|
||||
},
|
||||
},
|
||||
}
|
||||
node2 := corev1.Node{
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
Name: "node-without-external-ip",
|
||||
},
|
||||
Status: corev1.NodeStatus{
|
||||
Addresses: []corev1.NodeAddress{
|
||||
{Type: corev1.NodeInternalIP, Address: "node2-internal-ip"},
|
||||
},
|
||||
},
|
||||
}
|
||||
testCases := []struct {
|
||||
nodes []corev1.Node
|
||||
wantIP string
|
||||
}{
|
||||
{
|
||||
nodes: []corev1.Node{node1, node2},
|
||||
wantIP: "node1-external-ip",
|
||||
},
|
||||
{
|
||||
nodes: []corev1.Node{node2},
|
||||
wantIP: "node2-internal-ip",
|
||||
},
|
||||
{
|
||||
nodes: []corev1.Node{},
|
||||
wantIP: "",
|
||||
},
|
||||
}
|
||||
for _, tc := range testCases {
|
||||
gotIP := selectGatewayIP(tc.nodes)
|
||||
Expect(gotIP).Should(BeEquivalentTo(tc.wantIP))
|
||||
}
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user