@@ -11,9 +11,7 @@ NC='\033[0m' # No Color
11
11
# Default values
12
12
TARGET_KUBECONFIG=" "
13
13
MANAGEMENT_KUBECONFIG=" ${KUBECONFIG:- $HOME / .kube/ config} "
14
- SERVICE_ACCOUNT_NAME=" gateway-reader"
15
14
NAMESPACE=" default"
16
- TOKEN_DURATION=" 24h"
17
15
18
16
usage () {
19
17
echo " Usage: $0 --target-kubeconfig <path> [options]"
@@ -23,13 +21,14 @@ usage() {
23
21
echo " "
24
22
echo " Optional:"
25
23
echo " --management-kubeconfig <path> Path to management cluster kubeconfig (default: \$ KUBECONFIG or ~/.kube/config)"
26
- echo " --service-account <name> Service account name (default: gateway-reader)"
27
24
echo " --namespace <name> Namespace for secrets (default: default)"
28
- echo " --token-duration <duration> Token duration (default: 24h)"
29
25
echo " --help Show this help message"
30
26
echo " "
31
27
echo " Note: Cluster name will be extracted automatically from the target kubeconfig"
32
28
echo " "
29
+ echo " Authentication mode:"
30
+ echo " Uses target kubeconfig directly for full cluster admin access"
31
+ echo " "
33
32
echo " Example:"
34
33
echo " $0 --target-kubeconfig ~/.kube/target-config"
35
34
}
@@ -57,18 +56,10 @@ while [[ $# -gt 0 ]]; do
57
56
MANAGEMENT_KUBECONFIG=" $2 "
58
57
shift 2
59
58
;;
60
- --service-account)
61
- SERVICE_ACCOUNT_NAME=" $2 "
62
- shift 2
63
- ;;
64
59
--namespace)
65
60
NAMESPACE=" $2 "
66
61
shift 2
67
62
;;
68
- --token-duration)
69
- TOKEN_DURATION=" $2 "
70
- shift 2
71
- ;;
72
63
--help)
73
64
usage
74
65
exit 0
@@ -123,12 +114,7 @@ cleanup_existing_resources() {
123
114
log_info " Deleting existing secrets in management cluster..."
124
115
KUBECONFIG=" $MANAGEMENT_KUBECONFIG " kubectl delete secret " ${CLUSTER_NAME} -token" --namespace=" $NAMESPACE " --ignore-not-found=true
125
116
KUBECONFIG=" $MANAGEMENT_KUBECONFIG " kubectl delete secret " ${CLUSTER_NAME} -ca" --namespace=" $NAMESPACE " --ignore-not-found=true
126
-
127
- # Clean up service account and role binding in target cluster
128
- log_info " Cleaning up service account and role binding in target cluster..."
129
- KUBECONFIG=" $TARGET_KUBECONFIG " kubectl delete clusterrolebinding " ${SERVICE_ACCOUNT_NAME} -binding" --ignore-not-found=true
130
- KUBECONFIG=" $TARGET_KUBECONFIG " kubectl delete clusterrolebinding " ${SERVICE_ACCOUNT_NAME} -discovery-binding" --ignore-not-found=true
131
- KUBECONFIG=" $TARGET_KUBECONFIG " kubectl delete serviceaccount " $SERVICE_ACCOUNT_NAME " --namespace=" $NAMESPACE " --ignore-not-found=true
117
+ KUBECONFIG=" $MANAGEMENT_KUBECONFIG " kubectl delete secret " ${CLUSTER_NAME} -admin-kubeconfig" --namespace=" $NAMESPACE " --ignore-not-found=true
132
118
133
119
log_info " Cleanup completed. Creating fresh resources..."
134
120
else
@@ -139,6 +125,7 @@ cleanup_existing_resources() {
139
125
log_info " Creating ClusterAccess resource '$CLUSTER_NAME '"
140
126
log_info " Target kubeconfig: $TARGET_KUBECONFIG "
141
127
log_info " Management kubeconfig: $MANAGEMENT_KUBECONFIG "
128
+ log_info " Authentication mode: Admin kubeconfig (full cluster access)"
142
129
143
130
# Clean up existing resources if they exist
144
131
cleanup_existing_resources
@@ -176,49 +163,8 @@ if ! KUBECONFIG="$TARGET_KUBECONFIG" kubectl cluster-info &>/dev/null; then
176
163
fi
177
164
log_info " Target cluster is accessible"
178
165
179
- # Create service account in target cluster
180
- log_info " Creating service account '$SERVICE_ACCOUNT_NAME ' in target cluster..."
181
- KUBECONFIG=" $TARGET_KUBECONFIG " kubectl create serviceaccount " $SERVICE_ACCOUNT_NAME " --namespace=" $NAMESPACE " --dry-run=client -o yaml | \
182
- KUBECONFIG=" $TARGET_KUBECONFIG " kubectl apply -f -
183
-
184
- # Create cluster role binding
185
- log_info " Creating cluster role binding for service account..."
186
- KUBECONFIG=" $TARGET_KUBECONFIG " kubectl create clusterrolebinding " ${SERVICE_ACCOUNT_NAME} -binding" \
187
- --clusterrole=view \
188
- --serviceaccount=" ${NAMESPACE} :${SERVICE_ACCOUNT_NAME} " \
189
- --dry-run=client -o yaml | \
190
- KUBECONFIG=" $TARGET_KUBECONFIG " kubectl apply -f -
191
-
192
- # Create additional cluster role binding for discovery API
193
- log_info " Creating discovery API cluster role binding for service account..."
194
- KUBECONFIG=" $TARGET_KUBECONFIG " kubectl create clusterrolebinding " ${SERVICE_ACCOUNT_NAME} -discovery-binding" \
195
- --clusterrole=system:discovery \
196
- --serviceaccount=" ${NAMESPACE} :${SERVICE_ACCOUNT_NAME} " \
197
- --dry-run=client -o yaml | \
198
- KUBECONFIG=" $TARGET_KUBECONFIG " kubectl apply -f -
199
-
200
- # Generate token
201
- log_info " Generating token for service account..."
202
- TOKEN=$( KUBECONFIG=" $TARGET_KUBECONFIG " kubectl create token " $SERVICE_ACCOUNT_NAME " --namespace=" $NAMESPACE " --duration=" $TOKEN_DURATION " )
203
- if [[ -z " $TOKEN " ]]; then
204
- log_error " Failed to generate token"
205
- exit 1
206
- fi
207
- log_info " Token generated successfully"
208
-
209
- # Test token permissions
210
- log_info " Testing token permissions..."
211
- if ! KUBECONFIG=" $TARGET_KUBECONFIG " kubectl auth can-i list configmaps --as=" system:serviceaccount:${NAMESPACE} :${SERVICE_ACCOUNT_NAME} " & > /dev/null; then
212
- log_warn " Token may not have sufficient permissions to list configmaps"
213
- fi
214
-
215
- # Test Discovery API permissions
216
- log_info " Testing Discovery API permissions..."
217
- if ! KUBECONFIG=" $TARGET_KUBECONFIG " kubectl auth can-i get /apis --as=" system:serviceaccount:${NAMESPACE} :${SERVICE_ACCOUNT_NAME} " & > /dev/null; then
218
- log_error " Token does not have Discovery API permissions. This will cause 'Unauthorized' errors."
219
- exit 1
220
- fi
221
- log_info " Discovery API permissions verified successfully"
166
+ # Admin access mode: use kubeconfig directly
167
+ log_info " Using admin kubeconfig mode"
222
168
223
169
# Test management cluster connectivity
224
170
log_info " Testing management cluster connectivity..."
@@ -228,24 +174,24 @@ if ! KUBECONFIG="$MANAGEMENT_KUBECONFIG" kubectl cluster-info &>/dev/null; then
228
174
fi
229
175
log_info " Management cluster is accessible"
230
176
231
- # Create token secret in management cluster
232
- log_info " Creating token secret in management cluster..."
233
- KUBECONFIG=" $MANAGEMENT_KUBECONFIG " kubectl create secret generic " ${CLUSTER_NAME} -token " \
177
+ # Create kubeconfig secret in management cluster
178
+ log_info " Creating admin kubeconfig secret in management cluster..."
179
+ KUBECONFIG=" $MANAGEMENT_KUBECONFIG " kubectl create secret generic " ${CLUSTER_NAME} -admin-kubeconfig " \
234
180
--namespace=" $NAMESPACE " \
235
- --from-literal=token =" $TOKEN " \
181
+ --from-file=kubeconfig =" $TARGET_KUBECONFIG " \
236
182
--dry-run=client -o yaml | \
237
183
KUBECONFIG=" $MANAGEMENT_KUBECONFIG " kubectl apply -f -
238
184
239
- # Create CA secret in management cluster
185
+ # Create CA secret in management cluster
240
186
log_info " Creating CA secret in management cluster..."
241
187
echo " $CA_CERT " | KUBECONFIG=" $MANAGEMENT_KUBECONFIG " kubectl create secret generic " ${CLUSTER_NAME} -ca" \
242
188
--namespace=" $NAMESPACE " \
243
189
--from-file=ca.crt=/dev/stdin \
244
190
--dry-run=client -o yaml | \
245
191
KUBECONFIG=" $MANAGEMENT_KUBECONFIG " kubectl apply -f -
246
192
247
- # Create ClusterAccess resource
248
- log_info " Creating ClusterAccess resource..."
193
+ # Create ClusterAccess resource with kubeconfig authentication
194
+ log_info " Creating ClusterAccess resource with admin kubeconfig ..."
249
195
cat << EOF | KUBECONFIG="$MANAGEMENT_KUBECONFIG " kubectl apply -f -
250
196
apiVersion: gateway.openmfp.org/v1alpha1
251
197
kind: ClusterAccess
@@ -260,22 +206,20 @@ spec:
260
206
namespace: $NAMESPACE
261
207
key: ca.crt
262
208
auth:
263
- secretRef :
264
- name: ${CLUSTER_NAME} -token
209
+ kubeconfigSecretRef :
210
+ name: ${CLUSTER_NAME} -admin-kubeconfig
265
211
namespace: $NAMESPACE
266
- key: token
267
212
EOF
268
213
269
- log_info " ClusterAccess resource '$CLUSTER_NAME ' created successfully!"
214
+ log_info " ClusterAccess resource '$CLUSTER_NAME ' created successfully with admin access !"
270
215
echo " "
271
216
log_info " Summary:"
272
- echo " - Service account: $NAMESPACE /$SERVICE_ACCOUNT_NAME (in target cluster)"
273
- echo " - View permissions: ${SERVICE_ACCOUNT_NAME} -binding (ClusterRoleBinding to 'view')"
274
- echo " - Discovery permissions: ${SERVICE_ACCOUNT_NAME} -discovery-binding (ClusterRoleBinding to 'system:discovery')"
275
- echo " - Token secret: $NAMESPACE /${CLUSTER_NAME} -token (in management cluster)"
217
+ echo " - Admin kubeconfig secret: $NAMESPACE /${CLUSTER_NAME} -admin-kubeconfig (in management cluster)"
276
218
echo " - CA secret: $NAMESPACE /${CLUSTER_NAME} -ca (in management cluster)"
277
219
echo " - ClusterAccess: $CLUSTER_NAME "
278
220
echo " - Server URL: $SERVER_URL "
221
+ echo " - Access level: Full cluster admin (can access all resources including ClusterRoles, etc.)"
222
+
279
223
echo " "
280
224
log_info " You can now run the listener to generate the schema:"
281
225
echo " export ENABLE_KCP=false"
0 commit comments