Merge pull request #5773 from chaosi-zju/local-up

enable LoadBalancer type karmada-apiserver service in operator
This commit is contained in:
karmada-bot 2024-11-04 09:18:43 +08:00 committed by GitHub
commit 3ccd0fe801
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 26 additions and 1 deletions

View File

@ -70,7 +70,6 @@ func runUploadAdminKubeconfig(r workflow.RunData) error {
case corev1.ServiceTypeClusterIP:
apiserverName := util.KarmadaAPIServerName(data.GetName())
endpoint = fmt.Sprintf("https://%s.%s.svc.cluster.local:%d", apiserverName, data.GetNamespace(), constants.KarmadaAPIserverListenClientPort)
case corev1.ServiceTypeNodePort:
service, err := apiclient.GetService(data.RemoteClient(), util.KarmadaAPIServerName(data.GetName()), data.GetNamespace())
if err != nil {
@ -78,6 +77,21 @@ func runUploadAdminKubeconfig(r workflow.RunData) error {
}
nodePort := getNodePortFromAPIServerService(service)
endpoint = fmt.Sprintf("https://%s:%d", data.ControlplaneAddress(), nodePort)
case corev1.ServiceTypeLoadBalancer:
service, err := apiclient.GetService(data.RemoteClient(), util.KarmadaAPIServerName(data.GetName()), data.GetNamespace())
if err != nil {
return err
}
if len(service.Status.LoadBalancer.Ingress) == 0 {
return fmt.Errorf("no loadbalancer ingress found in service (%s/%s)", data.GetName(), data.GetNamespace())
}
loadbalancerAddress := getLoadbalancerAddress(service.Status.LoadBalancer.Ingress)
if loadbalancerAddress == "" {
return fmt.Errorf("can not find loadbalancer ip or hostname in service (%s/%s)", data.GetName(), data.GetNamespace())
}
endpoint = fmt.Sprintf("https://%s:%d", loadbalancerAddress, constants.KarmadaAPIserverListenClientPort)
default:
return errors.New("not supported service type for Karmada API server")
}
kubeconfig, err := buildKubeConfigFromSpec(data, endpoint)
@ -127,6 +141,17 @@ func getNodePortFromAPIServerService(service *corev1.Service) int32 {
return nodePort
}
func getLoadbalancerAddress(ingress []corev1.LoadBalancerIngress) string {
for _, in := range ingress {
if in.Hostname != "" {
return in.Hostname
} else if in.IP != "" {
return in.IP
}
}
return ""
}
func buildKubeConfigFromSpec(data InitData, serverURL string) (*clientcmdapi.Config, error) {
ca := data.GetCert(constants.CaCertAndKeyName)
if ca == nil {