本文介绍如何使用ServiceAccount Token访问Kubernetes集群,该功能适用于所有的Kubernetes集群,本例中为托管版集群。

背景信息

操作步骤

  1. 执行以下命令获取API Server 内网连接端点。
    $ kubectl get endpoints kubernetes


  2. 创建kubernetes-public-service.yaml文件,ip替换为步骤1查询到的API Server 内网连接端点。
    apiVersion: v1
    kind: Service
    metadata:
      name: kubernetes-public
    spec:
      type: LoadBalancer
      ports:
      - name: https
        port: 443
        protocol: TCP
        targetPort: 6443
    ---
    apiVersion: v1
    kind: Endpoints
    metadata:
      name: kubernetes-public
      namespace: default
    subsets:
    - addresses:
      - ip: <API Service address>  #替换为步骤1查询到的API Server内网连接端点
      ports:
      - name: https
        port: 6443
        protocol: TCP
  3. 执行以下命令,部署公网Endpoints。
    $ kubectl apply -f kubernetes-public-service.yaml
  4. 执行以下命令,获取公网SLB地址,即EXTERNAL-IP
    $ kubectl get service name
                   
    说明 此处的name与步骤2kubernetes-public-service.yaml文件中的name保持一致,本文为kubernetes-public


  5. 执行以下命令,查看ServiceAccount对应的Secret,本文的namespace以default为例。
    $ kubectl get secret --namespace=namespace
                   


  6. 执行以下命令,获取token值。
    $ kubectl get secret -n --namespace=namespace -o jsonpath={.data.token} | base64 -d
    说明 此处的namespace与步骤5中的namespace保持一致。
  7. 执行以下命令,访问托管版Kubernetes集群。
    $ curl -k -H 'Authorization: Bearer token' https://service-ip
                   
    说明
    • token为步骤6获取的token值。
    • service-ip为步骤4获取的公网SLB地址,即EXTERNAL-IP

执行结果

执行命令后,出现以下信息,表明连接成功。