Documentation
¶
Overview ¶
Package admission provides libraries for creating admission webhooks.
Example ¶
package main
import (
"fmt"
"k8s.io/api/admission/v1beta1"
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"sigs.k8s.io/controller-runtime/pkg/internal/admission"
)
func main() {
resourceType := metav1.GroupVersionResource{Group: "", Version: "v1", Resource: "pods"}
admission.HandleFunc("/pod", resourceType, func(review v1beta1.AdmissionReview) *v1beta1.AdmissionResponse {
pod := corev1.Pod{}
if errResp := admission.Decode(review, &pod, resourceType); errResp != nil {
return errResp
}
// Business logic for admission decision
if len(pod.Spec.Containers) != 1 {
return admission.DenyResponse(fmt.Sprintf(
"pod %s/%s may only have 1 container.", pod.Namespace, pod.Name))
}
return admission.AllowResponse()
})
admission.ListenAndServeTLS("")
}
Index ¶
- Variables
- func AllowResponse() *v1beta1.AdmissionResponse
- func Decode(review v1beta1.AdmissionReview, object runtime.Object, ...) *v1beta1.AdmissionResponse
- func DenyResponse(msg string) *v1beta1.AdmissionResponse
- func ErrorResponse(err error) *v1beta1.AdmissionResponse
- func HandleFunc(path string, gvr metav1.GroupVersionResource, fn Func)
- func ListenAndServeTLS(addr string) error
- type Func
- type Manager
Examples ¶
Constants ¶
This section is empty.
Variables ¶
var DefaultAdmissionFns = &Manager{ SMux: http.DefaultServeMux, }
DefaultAdmissionFns is the default admission control functions registry
Functions ¶
func AllowResponse ¶
func AllowResponse() *v1beta1.AdmissionResponse
AllowResponse returns a new response for admitting a request
Example ¶
package main
import (
"sigs.k8s.io/controller-runtime/pkg/internal/admission"
)
func main() {
admission.AllowResponse()
}
func Decode ¶
func Decode(review v1beta1.AdmissionReview, object runtime.Object, resourceType metav1.GroupVersionResource) *v1beta1.AdmissionResponse
Decode reads the Raw data from review and deserializes it into object returning a non-nil response if there was an error
Example ¶
package main
import (
"k8s.io/api/admission/v1beta1"
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"sigs.k8s.io/controller-runtime/pkg/internal/admission"
)
func main() {
var review v1beta1.AdmissionReview
resourceType := metav1.GroupVersionResource{Group: "", Version: "v1", Resource: "pods"}
pod := corev1.Pod{}
if errResp := admission.Decode(review, &pod, resourceType); errResp != nil {
// Send error resp
}
}
func DenyResponse ¶
func DenyResponse(msg string) *v1beta1.AdmissionResponse
DenyResponse returns a new response for denying a request
Example ¶
package main
import (
"fmt"
"sigs.k8s.io/controller-runtime/pkg/internal/admission"
)
func main() {
admission.DenyResponse(fmt.Sprintf("some deny explanation"))
}
func ErrorResponse ¶
func ErrorResponse(err error) *v1beta1.AdmissionResponse
ErrorResponse creates a new AdmissionResponse for an error handling the request
Example ¶
package main
import (
"fmt"
"sigs.k8s.io/controller-runtime/pkg/internal/admission"
)
func main() {
admission.ErrorResponse(fmt.Errorf("some error explanation"))
}
func HandleFunc ¶
func HandleFunc(path string, gvr metav1.GroupVersionResource, fn Func)
HandleFunc registers fn as an admission control webhook callback for the group,version,resources specified
Example ¶
package main
import (
"fmt"
"k8s.io/api/admission/v1beta1"
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"sigs.k8s.io/controller-runtime/pkg/internal/admission"
)
func main() {
resourceType := metav1.GroupVersionResource{Group: "", Version: "v1", Resource: "pods"}
admission.HandleFunc("/pod", resourceType, func(review v1beta1.AdmissionReview) *v1beta1.AdmissionResponse {
pod := corev1.Pod{}
if errResp := admission.Decode(review, &pod, resourceType); errResp != nil {
return errResp
}
// Business logic for admission decision
if len(pod.Spec.Containers) != 1 {
return admission.DenyResponse(fmt.Sprintf(
"pod %s/%s may only have 1 container.", pod.Namespace, pod.Name))
}
return admission.AllowResponse()
})
}
func ListenAndServeTLS ¶
ListenAndServeTLS starts the admission HttpServer.
Types ¶
type Func ¶
type Func func(review v1beta1.AdmissionReview) *v1beta1.AdmissionResponse
Func implements an AdmissionReview operation for a GroupVersionResource
Example ¶
package main
import (
"fmt"
"k8s.io/api/admission/v1beta1"
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"sigs.k8s.io/controller-runtime/pkg/internal/admission"
)
func main() {
var _ admission.Func = func(review v1beta1.AdmissionReview) *v1beta1.AdmissionResponse {
pod := corev1.Pod{}
resourceType := metav1.GroupVersionResource{Group: "", Version: "v1", Resource: "pods"}
if errResp := admission.Decode(review, &pod, resourceType); errResp != nil {
return errResp
}
// Business logic for admission decision
if len(pod.Spec.Containers) != 1 {
return admission.DenyResponse(fmt.Sprintf(
"pod %s/%s may only have 1 container.", pod.Namespace, pod.Name))
}
return admission.AllowResponse()
}
}
type Manager ¶
Manager manages admission controllers
func (*Manager) HandleFunc ¶
func (e *Manager) HandleFunc(path string, gvr metav1.GroupVersionResource, fn Func)
HandleFunc registers fn as an admission control webhook callback for the group,version,resources specified
Example ¶
package main
import (
"fmt"
"k8s.io/api/admission/v1beta1"
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"sigs.k8s.io/controller-runtime/pkg/internal/admission"
)
func main() {
resourceType := metav1.GroupVersionResource{Group: "", Version: "v1", Resource: "pods"}
ah := admission.Manager{}
ah.HandleFunc("/pod", resourceType, func(review v1beta1.AdmissionReview) *v1beta1.AdmissionResponse {
pod := corev1.Pod{}
if errResp := admission.Decode(review, &pod, resourceType); errResp != nil {
return errResp
}
// Business logic for admission decision
if len(pod.Spec.Containers) != 1 {
return admission.DenyResponse(fmt.Sprintf(
"pod %s/%s may only have 1 container.", pod.Namespace, pod.Name))
}
return admission.AllowResponse()
})
}