Files
k3k/pkg/controller/cluster/server/ingress.go
Enrico CandinoandGitHub 244011e68d Refactor kubeconfig URL generation (#938)
* Refactor kubeconfig generation to remove unused port parameter and update related functions

* Refactor kubeconfig generation to streamline error handling and remove unused imports

* Refactor kubeconfig URL generation functions and deprecate old implementation

* restore old behavior

* Add 'k3kcli kubeconfig get' command and update documentation

* Refactor URL generation by removing deprecated getURLFromService function and updating tests to use new implementation

* Fix expected URL for LoadBalancer test case to include hostname

* Refactor kubeconfig test documentation to clarify URL generation behavior for ClusterIP, NodePort, and LoadBalancer service types

* Refactor kubeconfig URL generation functions to improve clarity and maintainability

* Remove deprecated 'k3kcli kubeconfig get' command and update related documentation

* Set logger to discard in NewRootCmd for improved logging control

* Refactor getURLFromService to streamline ingress key retrieval
2026-06-26 11:16:54 +02:00

89 lines
2.0 KiB
Go

package server
import (
"context"
"k8s.io/utils/ptr"
networkingv1 "k8s.io/api/networking/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"github.com/rancher/k3k/pkg/apis/k3k.io/v1beta1"
"github.com/rancher/k3k/pkg/controller"
)
const (
httpsPort int32 = 443
k3sServerPort int32 = 6443
etcdPort int32 = 2379
)
func IngressName(clusterName string) string {
return controller.SafeConcatNameWithPrefix(clusterName, "ingress")
}
func Ingress(ctx context.Context, cluster *v1beta1.Cluster) networkingv1.Ingress {
ingress := networkingv1.Ingress{
TypeMeta: metav1.TypeMeta{
Kind: "Ingress",
APIVersion: "networking.k8s.io/v1",
},
ObjectMeta: metav1.ObjectMeta{
Name: IngressName(cluster.Name),
Namespace: cluster.Namespace,
},
Spec: networkingv1.IngressSpec{
Rules: ingressRules(cluster),
},
}
if cluster.Spec.Expose != nil && cluster.Spec.Expose.Ingress != nil {
ingressConfig := cluster.Spec.Expose.Ingress
if ingressConfig.IngressClassName != "" {
ingress.Spec.IngressClassName = ptr.To(ingressConfig.IngressClassName)
}
if ingressConfig.Annotations != nil {
ingress.Annotations = ingressConfig.Annotations
}
}
return ingress
}
func ingressRules(cluster *v1beta1.Cluster) []networkingv1.IngressRule {
var ingressRules []networkingv1.IngressRule
if cluster.Spec.Expose == nil || cluster.Spec.Expose.Ingress == nil {
return ingressRules
}
path := networkingv1.HTTPIngressPath{
Path: "/",
PathType: ptr.To(networkingv1.PathTypePrefix),
Backend: networkingv1.IngressBackend{
Service: &networkingv1.IngressServiceBackend{
Name: ServiceName(cluster.Name),
Port: networkingv1.ServiceBackendPort{
Number: httpsPort,
},
},
},
}
hosts := cluster.Spec.TLSSANs
for _, host := range hosts {
ingressRules = append(ingressRules, networkingv1.IngressRule{
Host: host,
IngressRuleValue: networkingv1.IngressRuleValue{
HTTP: &networkingv1.HTTPIngressRuleValue{
Paths: []networkingv1.HTTPIngressPath{path},
},
},
})
}
return ingressRules
}