Parcourir la source

k8s仪表盘配置信息

lingmin_package@163.com il y a 3 semaines
Parent
commit
0e7dd42135

+ 19 - 0
kubernetes/kubernetes-dashboard/README.md

@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+kubectl apply -f kubernetes-dashboard-external-service.yaml
+kubectl get svc -n kubernetes-dashboard kubernetes-dashboard-external -w
+lq@lq:~/kubernetes-dashboard$ kubectl get svc -n kubernetes-dashboard kubernetes-dashboard-external -w
+    
+NAME                            TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)         AGE
+kubernetes-dashboard-external   NodePort   10.104.129.163   <none>        443:30443/TCP   119s
+
+
+
+
+    https://192.168.92.96:30443/#/login
+		

+ 151 - 0
kubernetes/kubernetes-dashboard/create-dashboard-kubeconfig-fixed.sh

@@ -0,0 +1,151 @@
+#!/bin/bash
+# create-dashboard-kubeconfig-fixed.sh
+
+echo "🔧 创建 Kubernetes Dashboard 可用的 kubeconfig 文件..."
+
+# 1. 确保 dashboard-user 存在并具有权限
+cat <<EOF | kubectl apply -f -
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+  name: dashboard-user
+  namespace: kubernetes-dashboard
+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRoleBinding
+metadata:
+  name: dashboard-user-binding
+roleRef:
+  apiGroup: rbac.authorization.k8s.io
+  kind: ClusterRole
+  name: cluster-admin
+subjects:
+- kind: ServiceAccount
+  name: dashboard-user
+  namespace: kubernetes-dashboard
+EOF
+
+# 2. 等待 secret 创建完成
+sleep 3
+
+# 3. 获取正确的 token
+# 方法1:使用 create token 命令(推荐)
+TOKEN=$(kubectl create token dashboard-user -n kubernetes-dashboard --duration=8760h)
+
+# 如果方法1失败,使用方法2
+if [ -z "$TOKEN" ] || [ "$TOKEN" == "" ]; then
+    echo "⚠️  方法1失败,尝试方法2..."
+    SECRET_NAME=$(kubectl get serviceaccount dashboard-user -n kubernetes-dashboard -o jsonpath='{.secrets[0].name}')
+    TOKEN=$(kubectl get secret $SECRET_NAME -n kubernetes-dashboard -o jsonpath='{.data.token}' | base64 --decode)
+fi
+
+# 验证 token 是否有效
+if [ -z "$TOKEN" ] || [ "$TOKEN" == "" ]; then
+    echo "❌ 无法获取 token,正在创建新的 secret..."
+    
+    # 删除现有的 secret(如果有)
+    kubectl delete secret dashboard-user-token -n kubernetes-dashboard 2>/dev/null || true
+    
+    # 创建新的 secret
+    kubectl apply -f - <<EOF
+apiVersion: v1
+kind: Secret
+metadata:
+  name: dashboard-user-token
+  namespace: kubernetes-dashboard
+  annotations:
+    kubernetes.io/service-account.name: dashboard-user
+type: kubernetes.io/service-account-token
+EOF
+    
+    # 关联 secret 到 service account
+    kubectl patch serviceaccount dashboard-user -n kubernetes-dashboard --patch "{\"secrets\": [{\"name\": \"dashboard-user-token\"}]}"
+    
+    sleep 3
+    TOKEN=$(kubectl get secret dashboard-user-token -n kubernetes-dashboard -o jsonpath='{.data.token}' | base64 --decode)
+fi
+
+# 4. 获取集群信息
+SERVER=$(kubectl config view --minify -o jsonpath='{.clusters[0].cluster.server}')
+
+# 如果 server 地址是 localhost,需要改为节点 IP
+if [[ $SERVER == *"localhost"* ]] || [[ $SERVER == *"127.0.0.1"* ]]; then
+    NODE_IP=$(kubectl get nodes -o jsonpath='{.items[0].status.addresses[?(@.type=="InternalIP")].address}')
+    SERVER="https://${NODE_IP}:6443"
+fi
+
+# 5. 创建 kubeconfig 文件
+cat > dashboard-kubeconfig.yaml <<EOF
+apiVersion: v1
+clusters:
+- cluster:
+    insecure-skip-tls-verify: true
+    server: ${SERVER}
+  name: kubernetes-cluster
+contexts:
+- context:
+    cluster: kubernetes-cluster
+    user: dashboard-user
+    namespace: kubernetes-dashboard
+  name: dashboard-context
+current-context: dashboard-context
+kind: Config
+preferences: {}
+users:
+- name: dashboard-user
+  user:
+    token: ${TOKEN}
+EOF
+
+# 6. 验证 kubeconfig
+echo "🔍 验证 kubeconfig 文件内容..."
+echo "=========================================="
+cat dashboard-kubeconfig.yaml
+echo "=========================================="
+
+# 7. 测试 kubeconfig
+echo "🧪 测试 kubeconfig 是否有效..."
+if kubectl --kubeconfig=dashboard-kubeconfig.yaml get nodes > /dev/null 2>&1; then
+    echo "✅ kubeconfig 测试成功!"
+else
+    echo "⚠️  kubeconfig 测试失败,尝试另一种格式..."
+    
+    # 尝试使用证书方式
+    cat > dashboard-kubeconfig-alternative.yaml <<EOF
+apiVersion: v1
+clusters:
+- cluster:
+    certificate-authority-data: $(kubectl get secret $(kubectl get serviceaccount dashboard-user -n kubernetes-dashboard -o jsonpath='{.secrets[0].name}') -n kubernetes-dashboard -o jsonpath='{.data.ca\.crt}')
+    server: ${SERVER}
+  name: kubernetes-cluster
+contexts:
+- context:
+    cluster: kubernetes-cluster
+    user: dashboard-user
+  name: dashboard-context
+current-context: dashboard-context
+kind: Config
+users:
+- name: dashboard-user
+  user:
+    token: ${TOKEN}
+EOF
+    
+    echo "🔄 已创建替代格式的 kubeconfig"
+    mv dashboard-kubeconfig-alternative.yaml dashboard-kubeconfig.yaml
+fi
+
+echo ""
+echo "📋 使用说明:"
+echo "1. 文件已创建: $(pwd)/dashboard-kubeconfig.yaml"
+echo "2. 访问 Dashboard: https://192.168.92.96:8443"
+echo "3. 选择 'Kubeconfig' 登录方式"
+echo "4. 选择刚才创建的文件"
+echo ""
+echo "🔑 Token 值(备用):"
+echo "${TOKEN:0:50}..."
+echo ""
+echo "📝 如果仍然失败,请尝试以下步骤:"
+echo "   a. 检查 token 长度: ${#TOKEN} 字符"
+echo "   b. 确保 token 不为空"
+echo "   c. 尝试使用 Token 方式直接登录"

+ 19 - 0
kubernetes/kubernetes-dashboard/dashboard-kubeconfig.yaml

@@ -0,0 +1,19 @@
+apiVersion: v1
+clusters:
+- cluster:
+    insecure-skip-tls-verify: true
+    server: https://192.168.92.96:6443
+  name: kubernetes-cluster
+contexts:
+- context:
+    cluster: kubernetes-cluster
+    user: dashboard-user
+    namespace: kubernetes-dashboard
+  name: dashboard-context
+current-context: dashboard-context
+kind: Config
+preferences: {}
+users:
+- name: dashboard-user
+  user:
+    token: eyJhbGciOiJSUzI1NiIsImtpZCI6ImZMWDBQMXNUR0Y3ZERaWlg1UDhLRGdiMGxTQmNHcEhHa3Yza2czaExPaEUifQ.eyJhdWQiOlsiaHR0cHM6Ly9rdWJlcm5ldGVzLmRlZmF1bHQuc3ZjLmNsdXN0ZXIubG9jYWwiXSwiZXhwIjoxODAxNTYxNjQ3LCJpYXQiOjE3NzAwMjU2NDcsImlzcyI6Imh0dHBzOi8va3ViZXJuZXRlcy5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsIiwia3ViZXJuZXRlcy5pbyI6eyJuYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsInNlcnZpY2VhY2NvdW50Ijp7Im5hbWUiOiJkYXNoYm9hcmQtdXNlciIsInVpZCI6IjQzNzQxNWYzLWIwYzUtNDNiOC04MWYwLWIyZTM2NTk2YTUxOSJ9fSwibmJmIjoxNzcwMDI1NjQ3LCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZXJuZXRlcy1kYXNoYm9hcmQ6ZGFzaGJvYXJkLXVzZXIifQ.i9OmpQ7DLVQfU8S6RDl3OsCu31Q52JVLICz812_rP0mI-ZtTc9_FULLJoJU60gm5lTQfvglXXvUAHUZiqFTX94F9zQqIZwx5SnwSFE8_xUDHGGxlm7qTwngPIJUQKMLe8cqtZyHwIavFPpfbuIwkxir97oIRkMBJBpTI0IlndgGeJr0VvIFQaVTb3VbFQPJsZgmnc0_joa4D0QytOB73TDtF6j6u-UuTJVfCVq5tu9z7O99fGCKBrSt7beVNRGpaCa6Qga9EIcsyp3GhVubfkHAchLMwM8WI2KNve-E6DksPlYA-QC5WYuCalX7mEck32w97UJdxNxe75ahnWqxzGQ

+ 36 - 0
kubernetes/kubernetes-dashboard/kubernetes-dashboard-external-service.yaml

@@ -0,0 +1,36 @@
+apiVersion: v1
+kind: Service
+metadata:
+  name: kubernetes-dashboard-external
+  namespace: kubernetes-dashboard
+  labels:
+    k8s-app: kubernetes-dashboard
+spec:
+  type: NodePort
+  ports:
+    - port: 443
+      targetPort: 8443
+      nodePort: 30443  # 可选:指定固定端口(范围:30000-32767)
+      protocol: TCP
+      name: https
+  selector:
+    k8s-app: kubernetes-dashboard
+---
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+  name: admin-user
+  namespace: kubernetes-dashboard
+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRoleBinding
+metadata:
+  name: admin-user
+roleRef:
+  apiGroup: rbac.authorization.k8s.io
+  kind: ClusterRole
+  name: cluster-admin
+subjects:
+  - kind: ServiceAccount
+    name: admin-user
+    namespace: kubernetes-dashboard