Skip to content

Commit bc6074a

Browse files
committed
Add impersonation support for kueue-addon setup
Signed-off-by: Qing Hao <[email protected]>
1 parent b71bcc4 commit bc6074a

File tree

6 files changed

+158
-23
lines changed

6 files changed

+158
-23
lines changed

.github/actions/check-dockerfile/action.yml

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,10 @@ inputs:
55
repository:
66
description: 'The repository path to check for Dockerfile'
77
required: true
8+
repoRoot:
9+
description: 'The root directory of the repository (default: current directory)'
10+
required: false
11+
default: '.'
812

913
outputs:
1014
exists:
@@ -18,10 +22,21 @@ runs:
1822
id: check
1923
shell: bash
2024
run: |
21-
if [ -f "${{ inputs.repository }}/Dockerfile" ]; then
25+
REPO_ROOT="${{ inputs.repoRoot }}"
26+
# Remove trailing slash if present
27+
REPO_ROOT="${REPO_ROOT%/}"
28+
29+
# Construct the full path
30+
if [ "$REPO_ROOT" = "." ]; then
31+
DOCKERFILE_PATH="${{ inputs.repository }}/Dockerfile"
32+
else
33+
DOCKERFILE_PATH="${REPO_ROOT}/${{ inputs.repository }}/Dockerfile"
34+
fi
35+
36+
if [ -f "$DOCKERFILE_PATH" ]; then
2237
echo "exists=true" >> "$GITHUB_OUTPUT"
23-
echo "Dockerfile found for ${{ inputs.repository }}"
38+
echo "Dockerfile found for ${{ inputs.repository }} at $DOCKERFILE_PATH"
2439
else
2540
echo "exists=false" >> "$GITHUB_OUTPUT"
26-
echo "No Dockerfile found for ${{ inputs.repository }}, skipping image build"
41+
echo "No Dockerfile found for ${{ inputs.repository }} at $DOCKERFILE_PATH, skipping image build"
2742
fi

.github/workflows/releaseimage.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ jobs:
7171
uses: ./go/src/open-cluster-management.io/addon-contrib/.github/actions/check-dockerfile
7272
with:
7373
repository: ${{ matrix.repository }}
74+
repoRoot: go/src/open-cluster-management.io/addon-contrib
7475

7576
- name: build image
7677
if: steps.check-dockerfile.outputs.exists == 'true'
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
apiVersion: v1
2+
kind: Secret
3+
metadata:
4+
name: kind-cluster-ca
5+
namespace: open-cluster-management-addon
6+
type: kubernetes.io/tls
7+
data:
8+
tls.crt: ${CA_CRT}
9+
tls.key: ${CA_KEY}
10+
---
11+
apiVersion: cert-manager.io/v1
12+
kind: Issuer
13+
metadata:
14+
name: kind-ca-issuer
15+
namespace: open-cluster-management-addon
16+
spec:
17+
ca:
18+
secretName: kind-cluster-ca
19+
---
20+
apiVersion: cert-manager.io/v1
21+
kind: Certificate
22+
metadata:
23+
name: cluster-proxy-user-serving-cert
24+
namespace: open-cluster-management-addon
25+
spec:
26+
secretName: cluster-proxy-user-serving-cert
27+
duration: 8760h # 1 year
28+
renewBefore: 720h # 30 days
29+
commonName: cluster-proxy-addon-user.open-cluster-management-addon.svc
30+
dnsNames:
31+
- cluster-proxy-addon-user
32+
- cluster-proxy-addon-user.open-cluster-management-addon
33+
- cluster-proxy-addon-user.open-cluster-management-addon.svc
34+
- cluster-proxy-addon-user.open-cluster-management-addon.svc.cluster.local
35+
privateKey:
36+
algorithm: RSA
37+
size: 2048
38+
issuerRef:
39+
name: kind-ca-issuer
40+
kind: Issuer
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
apiVersion: v1
2+
kind: Service
3+
metadata:
4+
name: proxy-entrypoint-external
5+
namespace: open-cluster-management-addon
6+
labels:
7+
app: cluster-proxy
8+
component: proxy-entrypoint-external
9+
spec:
10+
type: NodePort
11+
selector:
12+
proxy.open-cluster-management.io/component-name: proxy-server
13+
ports:
14+
- name: agent-server
15+
port: 8091
16+
targetPort: 8091
17+
nodePort: 30091
18+
protocol: TCP

kueue-addon/build/config.yaml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
kind: Cluster
2+
apiVersion: kind.x-k8s.io/v1alpha4
3+
nodes:
4+
- role: control-plane
5+
extraPortMappings:
6+
- containerPort: 30091
7+
hostPort: 30091
8+
protocol: TCP

kueue-addon/build/setup-env.sh

Lines changed: 73 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ set -euo pipefail
77
# Parse command line arguments
88
CLEAN=false
99
E2E_MODE=false
10+
IMPERSONATION=false
1011
KUEUE_VERSION="v0.11.9"
1112
while [[ $# -gt 0 ]]; do
1213
case $1 in
@@ -18,13 +19,17 @@ while [[ $# -gt 0 ]]; do
1819
E2E_MODE=true
1920
shift
2021
;;
22+
--impersonation)
23+
IMPERSONATION=true
24+
shift
25+
;;
2126
--kueue-version)
2227
KUEUE_VERSION="$2"
2328
shift 2
2429
;;
2530
*)
2631
echo "Unknown option: $1"
27-
echo "Usage: $0 [--clean] [--e2e] [--kueue-version VERSION]"
32+
echo "Usage: $0 [--clean] [--e2e] [--impersonation] [--kueue-version VERSION]"
2833
exit 1
2934
;;
3035
esac
@@ -62,7 +67,8 @@ create_clusters() {
6267
fi
6368

6469
echo "Prepare kind clusters"
65-
for cluster in "${all_clusters[@]}"; do
70+
kind create cluster --name ${hub} --image kindest/node:v1.29.0 --config=config.yaml || true
71+
for cluster in "${spoke_clusters[@]}"; do
6672
kind create cluster --name "$cluster" --image kindest/node:v1.29.0 || true
6773
done
6874
}
@@ -106,6 +112,60 @@ install_kueue() {
106112
done
107113
}
108114

115+
# Function to install cluster-proxy with impersonation support
116+
install_cluster_proxy_with_impersonation() {
117+
echo "Install cert-manager"
118+
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.17.0/cert-manager.yaml --context ${hubctx}
119+
kubectl wait --for=condition=ready pod -l app.kubernetes.io/instance=cert-manager -n cert-manager --timeout=300s --context ${hubctx}
120+
121+
echo "Setup CA certificate for cluster-proxy"
122+
export CA_CRT=$(kubectl config view --raw -o jsonpath='{.clusters[?(@.name=="kind-local-cluster")].cluster.certificate-authority-data}')
123+
export CA_KEY=$(docker exec local-cluster-control-plane cat /etc/kubernetes/pki/ca.key | base64 -w 0)
124+
125+
# Apply CA cert resources with substitution
126+
envsubst < cluster-proxy-ca-cert.yaml | kubectl apply --context ${hubctx} -f -
127+
128+
echo "Install cluster-proxy with impersonation"
129+
GATEWAY_IP=$(docker inspect local-cluster-control-plane --format '{{.NetworkSettings.Networks.kind.IPAddress}}')
130+
131+
helm upgrade --install \
132+
-n open-cluster-management-addon --create-namespace \
133+
cluster-proxy ocm/cluster-proxy \
134+
--set "proxyServer.entrypointAddress=${GATEWAY_IP}" \
135+
--set "proxyServer.port=30091" \
136+
--set "enableServiceProxy=true" \
137+
--set installByPlacement.placementName=global \
138+
--set installByPlacement.placementNamespace=open-cluster-management-addon
139+
140+
echo "Create proxy entrypoint external service"
141+
kubectl apply --context ${hubctx} -f cluster-proxy-service.yaml
142+
}
143+
144+
# Function to install kueue-addon
145+
install_kueue_addon() {
146+
echo "Install kueue-addon"
147+
148+
# Determine chart source
149+
if [[ "$E2E_MODE" == "true" ]]; then
150+
CHART_SOURCE="../charts/kueue-addon"
151+
EXTRA_ARGS="--set image.tag=e2e"
152+
else
153+
CHART_SOURCE="ocm/kueue-addon"
154+
EXTRA_ARGS=""
155+
fi
156+
157+
# Add impersonation settings if enabled
158+
if [[ "$IMPERSONATION" == "true" ]]; then
159+
EXTRA_ARGS="$EXTRA_ARGS --set clusterProxy.url=https://cluster-proxy-addon-user.open-cluster-management-addon.svc.cluster.local:9092 --set clusterProxy.impersonation.enabled=true"
160+
fi
161+
162+
# Install kueue-addon
163+
helm upgrade --install \
164+
-n open-cluster-management-addon --create-namespace \
165+
kueue-addon "$CHART_SOURCE" \
166+
$EXTRA_ARGS
167+
}
168+
109169
# Function to install OCM addons
110170
install_ocm_addons() {
111171
kubectl config use-context ${hubctx}
@@ -122,31 +182,24 @@ install_ocm_addons() {
122182
--set enableAddOnDeploymentConfig=true \
123183
--set hubDeployMode=AddOnTemplate
124184

125-
echo "Install cluster-proxy"
126-
helm upgrade --install \
127-
-n open-cluster-management-addon --create-namespace \
128-
cluster-proxy ocm/cluster-proxy \
129-
--set installByPlacement.placementName=global \
130-
--set installByPlacement.placementNamespace=open-cluster-management-addon
185+
if [[ "$IMPERSONATION" == "true" ]]; then
186+
install_cluster_proxy_with_impersonation
187+
else
188+
echo "Install cluster-proxy"
189+
helm upgrade --install \
190+
-n open-cluster-management-addon --create-namespace \
191+
cluster-proxy ocm/cluster-proxy \
192+
--set installByPlacement.placementName=global \
193+
--set installByPlacement.placementNamespace=open-cluster-management-addon
194+
fi
131195

132196
echo "Install cluster-permission"
133197
helm upgrade --install \
134198
-n open-cluster-management --create-namespace \
135199
cluster-permission ocm/cluster-permission \
136200
--set global.imageOverrides.cluster_permission=quay.io/open-cluster-management/cluster-permission:latest
137201

138-
if [[ "$E2E_MODE" == "true" ]]; then
139-
echo "Install kueue-addon from local chart"
140-
helm upgrade --install \
141-
-n open-cluster-management-addon --create-namespace \
142-
kueue-addon ../charts/kueue-addon \
143-
--set image.tag=e2e
144-
else
145-
echo "Install kueue-addon"
146-
helm upgrade --install \
147-
-n open-cluster-management-addon --create-namespace \
148-
kueue-addon ocm/kueue-addon
149-
fi
202+
install_kueue_addon
150203

151204
echo "Install resource-usage-collect-addon"
152205
helm upgrade --install \

0 commit comments

Comments
 (0)