diff --git a/examples/customresourceinterpreter/karmada-interpreter-webhook-example.yaml b/examples/customresourceinterpreter/karmada-interpreter-webhook-example.yaml index c78497ddd..8f67e41fe 100644 --- a/examples/customresourceinterpreter/karmada-interpreter-webhook-example.yaml +++ b/examples/customresourceinterpreter/karmada-interpreter-webhook-example.yaml @@ -63,6 +63,7 @@ spec: ports: - port: 443 targetPort: 8445 + type: LoadBalancer --- apiVersion: v1 kind: ServiceAccount diff --git a/examples/customresourceinterpreter/webhook-configuration.yaml b/examples/customresourceinterpreter/webhook-configuration.yaml index 7a4d8478f..967830fee 100644 --- a/examples/customresourceinterpreter/webhook-configuration.yaml +++ b/examples/customresourceinterpreter/webhook-configuration.yaml @@ -11,7 +11,7 @@ webhooks: apiVersions: [ "v1alpha1" ] kinds: [ "Workload" ] clientConfig: - url: https://karmada-interpreter-webhook-example.karmada-system.svc:443/interpreter-workload + url: https://{{karmada-interpreter-webhook-example-svc-address}}:443/interpreter-workload caBundle: {{caBundle}} interpreterContextVersions: [ "v1alpha1" ] timeoutSeconds: 3 diff --git a/hack/deploy-karmada.sh b/hack/deploy-karmada.sh index 27842f9ca..39bd141cd 100755 --- a/hack/deploy-karmada.sh +++ b/hack/deploy-karmada.sh @@ -112,6 +112,11 @@ function installCRDs() { kubectl kustomize "${crd_path}"/_crds | kubectl apply -f - } +# Use x.x.x.6 IP address, which is the same CIDR with the node address of the Kind cluster, +# as the loadBalancer service address of component karmada-interpreter-webhook-example. +interpreter_webhook_example_service_external_ip_prefix=$(echo $(util::get_apiserver_ip_from_kubeconfig "${HOST_CLUSTER_NAME}") | awk -F. '{printf "%s.%s.%s",$1,$2,$3}') +interpreter_webhook_example_service_external_ip_address=${interpreter_webhook_example_service_external_ip_prefix}.6 + # generate cert util::cmd_must_exist "openssl" util::cmd_must_exist_cfssl ${CFSSL_VERSION} @@ -119,7 +124,7 @@ util::cmd_must_exist_cfssl ${CFSSL_VERSION} util::create_signing_certkey "" "${CERT_DIR}" server '"client auth","server auth"' util::create_signing_certkey "" "${CERT_DIR}" front-proxy '"client auth","server auth"' # signs a certificate -util::create_certkey "" "${CERT_DIR}" "server-ca" karmada system:admin kubernetes.default.svc "*.etcd.karmada-system.svc.cluster.local" "*.karmada-system.svc.cluster.local" "*.karmada-system.svc" "localhost" "127.0.0.1" +util::create_certkey "" "${CERT_DIR}" "server-ca" karmada system:admin kubernetes.default.svc "*.etcd.karmada-system.svc.cluster.local" "*.karmada-system.svc.cluster.local" "*.karmada-system.svc" "localhost" "127.0.0.1" "${interpreter_webhook_example_service_external_ip_address}" util::create_certkey "" "${CERT_DIR}" "front-proxy-ca" front-proxy-client front-proxy-client kubernetes.default.svc "*.etcd.karmada-system.svc.cluster.local" "*.karmada-system.svc.cluster.local" "*.karmada-system.svc" "localhost" "127.0.0.1" # create namespace for control plane components diff --git a/hack/post-run-e2e.sh b/hack/post-run-e2e.sh index 9ec4d1d76..2fea9b3e3 100755 --- a/hack/post-run-e2e.sh +++ b/hack/post-run-e2e.sh @@ -20,6 +20,15 @@ export KUBECONFIG="${MAIN_KUBECONFIG}" kubectl config use-context "${HOST_CLUSTER_NAME}" kubectl delete -f "${REPO_ROOT}"/examples/customresourceinterpreter/karmada-interpreter-webhook-example.yaml +# uninstall metallb +kubectl delete configmap config -n metallb-system +kubectl delete -f https://raw.githubusercontent.com/metallb/metallb/v0.12.1/manifests/metallb.yaml +kubectl delete -f https://raw.githubusercontent.com/metallb/metallb/v0.12.1/manifests/namespace.yaml + +kubectl get configmap kube-proxy -n kube-system -o yaml | \ +sed -e "s/strictARP: true/strictARP: false/" | \ +kubectl apply -f - -n kube-system + # delete interpreter workload webhook configuration kubectl config use-context "${KARMADA_APISERVER}" kubectl delete ResourceInterpreterWebhookConfiguration examples diff --git a/hack/pre-run-e2e.sh b/hack/pre-run-e2e.sh index 0b30e3100..1d8322160 100755 --- a/hack/pre-run-e2e.sh +++ b/hack/pre-run-e2e.sh @@ -25,15 +25,51 @@ ROOT_CA_FILE=${CERT_DIR}/server-ca.crt # load interpreter webhook example image kind load docker-image "${REGISTRY}/karmada-interpreter-webhook-example:${VERSION}" --name="${HOST_CLUSTER_NAME}" -# deploy interpreter webhook example in karmada-host export KUBECONFIG="${MAIN_KUBECONFIG}" kubectl config use-context "${HOST_CLUSTER_NAME}" + +# Due to we are using kube-proxy in IPVS mode, we have to enable strict ARP mode. +# refer to https://metallb.universe.tf/installation/#preparation +kubectl get configmap kube-proxy -n kube-system -o yaml | \ +sed -e "s/strictARP: false/strictARP: true/" | \ +kubectl apply -f - -n kube-system + +# install metallb by manifest, refer to https://metallb.universe.tf/installation/#installation-by-manifest +kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.12.1/manifests/namespace.yaml +kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.12.1/manifests/metallb.yaml +util::wait_pod_ready metallb metallb-system + +# Use x.x.x.6 IP address, which is the same CIDR with the node address of the Kind cluster, +# as the loadBalancer service address of component karmada-interpreter-webhook-example. +interpreter_webhook_example_service_external_ip_prefix=$(echo $(util::get_apiserver_ip_from_kubeconfig "${HOST_CLUSTER_NAME}") | awk -F. '{printf "%s.%s.%s",$1,$2,$3}') +interpreter_webhook_example_service_external_ip_address=${interpreter_webhook_example_service_external_ip_prefix}.6 + +# config with layer 2 configuration. refer to https://metallb.universe.tf/configuration/#layer-2-configuration +cat <