1. 环境准备

1.1 先决条件

  • 你需要一台安装了 Docker 的计算机(Linux、macOS 或 Windows)。

  • 需要安装 kubectl 以管理 Kubernetes 集群。

1.2 安装 Docker

如果你尚未安装 Docker,请根据你的操作系统安装:

Linux (Ubuntu):

sudo apt update
sudo apt install -y docker.io

1.3 安装 kubectl

curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" chmod +x kubectl sudo mv kubectl /usr/local/bin/

验证安装:

kubectl version --client

2. 安装 Kind

2.1 下载并安装 Kind

curl -Lo ./kind https://kind.sigs.k8s.io/dl/latest/kind-linux-amd64 chmod +x ./kind sudo mv ./kind /usr/local/bin/kind

验证 Kind 是否正确安装:

kind version

3. 创建自定义多节点集群

如果你想创建一个多节点集群(1 个控制平面 + 2 个工作节点),你需要一个 YAML 配置文件。

3.1 创建 Kind 配置文件

这里我将有可能用到的端口都映射到宿主机了,因为docker容器一旦启动,就没办法增加端口映射,所以需要创建的时候配置好

cat <<EOF > kind-config.yaml
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
  - role: control-plane
    extraPortMappings:
      - containerPort: 30080   # Kubernetes 内部端口 (NodePort)
        hostPort: 30080        # 物理机访问端口
        protocol: TCP
      - containerPort: 30443   # 另一服务的端口,例如 Kubernetes Dashboard
        hostPort: 30443
        protocol: TCP
      - containerPort: 6443   # 另一服务的端口,例如 Kubernetes Dashboard
        hostPort: 36443
        protocol: TCP
      - containerPort: 443   # 另一服务的端口,例如 Kubernetes Dashboard
        hostPort: 35443
        protocol: TCP
      - containerPort: 80   # 另一服务的端口,例如 Kubernetes Dashboard
        hostPort: 34080
        protocol: TCP
  - role: worker
  - role: worker
EOF

3.2 运行 Kind 集群

kind create cluster --name my-cluster --config kind-config.yaml

  • 这个命令会创建一个拥有 1 个控制节点和 2 个工作节点的 Kubernetes 集群。

3.3 验证集群节点

kubectl get nodes

你应该看到类似的输出:

NAME                     STATUS   ROLES           AGE     VERSION
my-cluster-control-plane Ready    control-plane   2m      v1.28.0
my-cluster-worker        Ready    <none>          1m      v1.28.0
my-cluster-worker2       Ready    <none>          1m      v1.28.0

4. 部署 Kubernetes Dashboard

4.1 部署Kubernetes Dashboard

官方提供了 Dashboard 的 YAML 文件,你可以直接应用:

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml

说明:这个命令会创建 Dashboard 所需的 DeploymentServiceClusterRole 等资源。


4.2 查看 Dashboard Pod 状态

确认 Dashboard 是否正确运行:

kubectl get pods -n kubernetes-dashboard

你应该能看到类似的输出:

NAME                                         READY   STATUS    RESTARTS   AGE
kubernetes-dashboard-7b544877d5-abcde        1/1     Running   0          1m
dashboard-metrics-scraper-6b5c59d6d7-fghij   1/1     Running   0          1m

如果 STATUS 不是 Running,可以用 kubectl describe pod <pod-name> -n kubernetes-dashboard 查看具体错误。


4.3 配置访问方式

默认情况下,Dashboard 的 Service 类型是 ClusterIP无法直接从外部访问,你需要选择一种方式访问它:

方法 1:使用 kubectl proxy

在终端运行:

kubectl proxy

然后在浏览器中访问:

http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/

注意:这种方式只在运行 kubectl proxy 的终端有效,并且访问受限,需要身份验证。


方法 2:修改 Service 为 NodePort

如果你希望能够直接通过 http://localhost:30080 访问 Dashboard,可以修改 Service:

kubectl patch svc kubernetes-dashboard -n kubernetes-dashboard -p '{
  "spec": {
    "type": "NodePort",
    "ports": [
      {
        "port": 443,
        "targetPort": 8443,
        "nodePort": 30080
      }
    ]
  }
}'

这里 30000 就是你可以访问的端口,现在可以通过:

https://localhost:30080

来访问 Dashboard(可能会有 HTTPS 证书警告,忽略即可)。


5. 创建管理员用户(ServiceAccount + RBAC)

Dashboard 需要身份验证,默认情况下没有创建任何用户。你需要创建一个具有管理员权限的 ServiceAccount。

5.1 创建 ServiceAccount 和 ClusterRoleBinding

运行以下命令:

cat <<EOF | kubectl apply -f -
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
EOF

5.2 获取访问 Token

执行以下命令:

kubectl -n kubernetes-dashboard create token admin-user

这个命令会返回一个长字符串,如:

eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...

这个 Token 就是登录 Dashboard 所需的凭据。


6. 访问 Kubernetes Dashboard

  1. 如果使用 kubectl proxy 方式,在浏览器中访问:

    http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/

  2. 如果使用 NodePort 方式,在浏览器中访问:

    https://localhost:30080

  3. 在登录页面,选择 “令牌”(Token) 方式,粘贴上面获取的 Token,点击 “登录”