Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,9 @@ CRD_DOCS_TEMPLATE ?= docs/assets/template
VERSYM="github.com/apache/apisix-ingress-controller/internal/version._buildVersion"
GITSHASYM="github.com/apache/apisix-ingress-controller/internal/version._buildGitRevision"
BUILDOSSYM="github.com/apache/apisix-ingress-controller/internal/version._buildOS"
GO_LDFLAGS ?= "-X=$(VERSYM)=$(VERSION) -X=$(GITSHASYM)=$(GITSHA) -X=$(BUILDOSSYM)=$(OSNAME)/$(OSARCH)"
MINK8SVERSYM="github.com/apache/apisix-ingress-controller/internal/manager._minK8sVersion"
MIN_K8S_VERSION ?= 1.26.0
GO_LDFLAGS ?= "-X=$(VERSYM)=$(VERSION) -X=$(GITSHASYM)=$(GITSHA) -X=$(BUILDOSSYM)=$(OSNAME)/$(OSARCH) -X=$(MINK8SVERSYM)=$(MIN_K8S_VERSION)"

# gateway-api
GATEAY_API_VERSION ?= v1.3.0
Expand Down
2 changes: 2 additions & 0 deletions docs/en/latest/install.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,8 @@ Before installing APISIX ingress controller, ensure you have:
1. A working Kubernetes cluster (version 1.26+)
- Production: TKE, EKS, AKS, or other cloud-managed clusters
- Development: minikube, kind, or k3s

Kubernetes 1.26+ is required because the controller uses CEL (Common Expression Language) validation rules in CRDs, IngressClass Namespaced Params support, and EndpointSlice terminating conditions.
2. [kubectl](https://kubernetes.io/docs/tasks/tools/) installed and configured to access your cluster
3. [Helm](https://helm.sh/) (version 3.8+) installed

Expand Down
3 changes: 0 additions & 3 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ require (
github.com/olekukonko/tablewriter v1.1.1
github.com/onsi/ginkgo/v2 v2.22.0
github.com/onsi/gomega v1.36.1
github.com/panjf2000/ants/v2 v2.11.3
github.com/pkg/errors v0.9.1
github.com/prometheus/client_golang v1.19.1
github.com/samber/lo v1.47.0
Expand All @@ -35,7 +34,6 @@ require (
k8s.io/apiextensions-apiserver v0.32.3
k8s.io/apimachinery v0.32.3
k8s.io/client-go v0.32.3
k8s.io/code-generator v0.32.3
k8s.io/kubectl v0.30.3
k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738
sigs.k8s.io/controller-runtime v0.20.4
Expand Down Expand Up @@ -213,7 +211,6 @@ require (
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect
k8s.io/apiserver v0.32.3 // indirect
k8s.io/component-base v0.32.3 // indirect
k8s.io/gengo/v2 v2.0.0-20240911193312-2b36238f13e9 // indirect
k8s.io/klog/v2 v2.130.1 // indirect
k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f // indirect
moul.io/http2curl/v2 v2.3.0 // indirect
Expand Down
6 changes: 0 additions & 6 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -333,8 +333,6 @@ github.com/onsi/ginkgo/v2 v2.22.0 h1:Yed107/8DjTr0lKCNt7Dn8yQ6ybuDRQoMGrNFKzMfHg
github.com/onsi/ginkgo/v2 v2.22.0/go.mod h1:7Du3c42kxCUegi0IImZ1wUQzMBVecgIHjR1C+NkhLQo=
github.com/onsi/gomega v1.36.1 h1:bJDPBO7ibjxcbHMgSCoo4Yj18UWbKDlLwX1x9sybDcw=
github.com/onsi/gomega v1.36.1/go.mod h1:PvZbdDc8J6XJEpDK4HCuRBm8a6Fzp9/DmhC9C7yFlog=
github.com/panjf2000/ants/v2 v2.11.3 h1:AfI0ngBoXJmYOpDh9m516vjqoUu2sLrIVgppI9TZVpg=
github.com/panjf2000/ants/v2 v2.11.3/go.mod h1:8u92CYMUc6gyvTIw8Ru7Mt7+/ESnJahz5EVtqfrilek=
github.com/pelletier/go-toml/v2 v2.0.1/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo=
github.com/pkg/diff v0.0.0-20200914180035-5b29258ca4f7/go.mod h1:zO8QMzTeZd5cpnIkz/Gn6iK0jDfGicM1nynOkkPIl28=
github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=
Expand Down Expand Up @@ -597,12 +595,8 @@ k8s.io/apiserver v0.32.3 h1:kOw2KBuHOA+wetX1MkmrxgBr648ksz653j26ESuWNY8=
k8s.io/apiserver v0.32.3/go.mod h1:q1x9B8E/WzShF49wh3ADOh6muSfpmFL0I2t+TG0Zdgc=
k8s.io/client-go v0.32.3 h1:RKPVltzopkSgHS7aS98QdscAgtgah/+zmpAogooIqVU=
k8s.io/client-go v0.32.3/go.mod h1:3v0+3k4IcT9bXTc4V2rt+d2ZPPG700Xy6Oi0Gdl2PaY=
k8s.io/code-generator v0.32.3 h1:31p2TVzC9+hVdSkAFruAk3JY+iSfzrJ83Qij1yZutyw=
k8s.io/code-generator v0.32.3/go.mod h1:+mbiYID5NLsBuqxjQTygKM/DAdKpAjvBzrJd64NU1G8=
k8s.io/component-base v0.32.3 h1:98WJvvMs3QZ2LYHBzvltFSeJjEx7t5+8s71P7M74u8k=
k8s.io/component-base v0.32.3/go.mod h1:LWi9cR+yPAv7cu2X9rZanTiFKB2kHA+JjmhkKjCZRpI=
k8s.io/gengo/v2 v2.0.0-20240911193312-2b36238f13e9 h1:si3PfKm8dDYxgfbeA6orqrtLkvvIeH8UqffFJDl0bz4=
k8s.io/gengo/v2 v2.0.0-20240911193312-2b36238f13e9/go.mod h1:EJykeLsmFC60UQbYJezXkEsG2FLrt0GPNkU5iK5GWxU=
k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk=
k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE=
k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f h1:GA7//TjRY9yWGy1poLzYYJJ4JRdzg3+O6e8I+e+8T5Y=
Expand Down
2 changes: 1 addition & 1 deletion internal/manager/controllers.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ package manager
import (
"context"

"github.com/go-logr/logr"
netv1 "k8s.io/api/networking/v1"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/apimachinery/pkg/runtime"
Expand All @@ -40,7 +41,6 @@ import (
"github.com/apache/apisix-ingress-controller/internal/provider"
types "github.com/apache/apisix-ingress-controller/internal/types"
"github.com/apache/apisix-ingress-controller/pkg/utils"
"github.com/go-logr/logr"
)

// K8s
Expand Down
43 changes: 43 additions & 0 deletions internal/manager/run.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ import (
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime/schema"
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
"k8s.io/apimachinery/pkg/util/version"
"k8s.io/client-go/discovery"
clientgoscheme "k8s.io/client-go/kubernetes/scheme"
"k8s.io/utils/ptr"
ctrl "sigs.k8s.io/controller-runtime"
Expand Down Expand Up @@ -53,6 +55,11 @@ var (
scheme = runtime.NewScheme()
)

var (
// set value during compilation
_minK8sVersion string
)

func init() {
utilruntime.Must(clientgoscheme.AddToScheme(scheme))

Expand Down Expand Up @@ -164,6 +171,9 @@ func Run(ctx context.Context, logger logr.Logger) error {
return err
}

// Check Kubernetes cluster version
checkK8sVersion(mgr, setupLog)

readier := readiness.NewReadinessManager(mgr.GetClient(), logger)
registerReadiness(mgr, readier)

Expand Down Expand Up @@ -254,3 +264,36 @@ func Run(ctx context.Context, logger logr.Logger) error {
setupLog.Info("starting controller manager")
return mgr.Start(ctrl.SetupSignalHandler())
}

func checkK8sVersion(mgr ctrl.Manager, logger logr.Logger) {
minV, err := version.ParseSemantic(_minK8sVersion)
if err != nil {
logger.Info("failed to parse minimum version", "error", err)
return
}

discoveryClient, err := discovery.NewDiscoveryClientForConfig(mgr.GetConfig())
if err != nil {
logger.Info("failed to create discovery client for version check", "error", err)
return
}

serverVersion, err := discoveryClient.ServerVersion()
if err != nil {
logger.Info("failed to get Kubernetes server version", "error", err)
return
}

currentVersion, err := version.ParseSemantic(serverVersion.GitVersion)
if err != nil {
logger.Info("failed to parse server version", "error", err)
return
}

if !currentVersion.AtLeast(minV) {
logger.Info("WARNING: Kubernetes cluster version does not meet minimum requirement",
"currentVersion", currentVersion.String(),
"minimumVersion", minV.String(),
)
}
}
Loading