通过curl访问k8s集群获取证书或token的方式

K8S安全控制框架主要由下面3个阶段进行控制,每一个阶段都支持插件方式,通过API Server配置来启用插件。
1. Authentication(认证)
2. Authorization(授权)
3. Admission Control(准入控制)

客户端(kubectl或curl等)要想访问K8s集群API Server,一般需要证书、Token或者用户名+密码。如果Pod访问,需要ServiceAccount。
认证(Authentication)
三种客户端身份认证:
HTTPS 证书认证:基于CA证书签名的数字证书认证
HTTP Token认证:通过一个Token来识别用户
HTTP Base认证:用户名+密码的方式认证

鉴权(Authentication)
RBAC(Role-Based Access Control,基于角色的访问控制):负责完成授权(Authorization)工作。 RBAC根据API请求属性,决定允许还是拒绝。
比较常见的授权维度:
• user:用户名
• group:用户分组
• 资源,例如pod、deployment
• 资源操作方法:get,list,create,update,patch,watch,delete
• 命名空间
• API组


基于角色的权限访问控制:RBAC
RBAC(Role-Based Access Control,基于角色的访问控 制),允许通过Kubernetes API动态配置策略。
角色
• Role:授权特定命名空间的访问权限
• ClusterRole:授权 所有命名空间 的访问权限
角色绑定
• RoleBinding:将角色绑定到主体(即subject)
• ClusterRoleBinding:将 集群角色绑定到主体
主体(subject)
• User:用户
• Group:用户组
• ServiceAccount:服务账号

Kubernetes RBAC 为指定用户授权访问不同命名空间权限_k8s dashbord 用户授权-CSDN博客

第一种:客户端访问

证书

1)ca根证书

[root@k8s-node02 ~]# grep certificate-auth ~/.kube/config  | cut -d " " -f 6 |base64 -d>ca.pem

2)client-cert

[root@k8s-node02 ~]# grep client-cert ~/.kube/config  | cut -d " " -f 6 | base64 -d>client-cert.cert

3)client-key

[root@k8s-node02 ~]# grep client-key-data ~/.kube/config  | cut -d " " -f 6 |base64 -d>client-key.key

4)然后访问集群:

[root@k8s-node02 ~]# curl -k  --cert ./client-cert.cert --key ./client-key.key   https://rancher.jettech.cn

5)访问某个节点的监控接口:

[root@k8s-node02 ~]# netstat -atunpl |grep kubelet
tcp        0      0 127.0.0.1:10248         0.0.0.0:*               LISTEN      4014/kubelet        
tcp        0      0 127.0.0.1:42873         0.0.0.0:*               LISTEN      4014/kubelet        
tcp        0      0 127.0.0.1:36198         127.0.0.1:6443          ESTABLISHED 4014/kubelet        
tcp        0      0 127.0.0.1:36179         127.0.0.1:6443          ESTABLISHED 4014/kubelet        
tcp        0      0 127.0.0.1:36206         127.0.0.1:6443          ESTABLISHED 4014/kubelet        
tcp        0      0 127.0.0.1:36202         127.0.0.1:6443          ESTABLISHED 4014/kubelet        
tcp        0      0 127.0.0.1:36204         127.0.0.1:6443          ESTABLISHED 4014/kubelet        
tcp6       0      0 :::10250                :::*                    LISTEN      4014/kubelet        
tcp6       0      0 172.16.10.59:10250      10.42.14.65:56272       ESTABLISHED 4014/kubelet        
[root@k8s-node02 ~]# curl -k  --cert ./client-cert.cert --key ./client-key.key   https://localhost:10250/metrics

 或用用集群cluster-admin这个角色,这个角色权限最大,找到这个角色用的用户然后根据用户找到token即可

1)看系统集群角色信息

[root@k8s-node02 ~]# kubectl describe clusterrole cluster-admin 
Name:         cluster-admin
Labels:       kubernetes.io/bootstrapping=rbac-defaults
Annotations:  rbac.authorization.kubernetes.io/autoupdate: true
PolicyRule:
  Resources  Non-Resource URLs  Resource Names  Verbs
  ---------  -----------------  --------------  -----
  *.*        []                 []              [*]
             [*]                []              [*]
[root@k8s-node02 ~]# 

2)找到绑定角色的用户(serviceaccount),namesapce

[root@k8s-node02 ~]# kubectl get clusterrolebinding  |grep admin
cattle-admin-binding                                   ClusterRole/cattle-admin                                           23h
cluster-admin                                          ClusterRole/cluster-admin                                          23h
globaladmin-user-l5ffv                                 ClusterRole/cluster-admin                                          23h
job-deployer                                           ClusterRole/cluster-admin                                          23h
[root@k8s-node02 ~]# kubectl describe clusterrolebinding  cattle-admin-binding
Name:         cattle-admin-binding
Labels:       cattle.io/creator=norman
Annotations:  <none>
Role:
  Kind:  ClusterRole
  Name:  cattle-admin
Subjects:
  Kind            Name    Namespace
  ----            ----    ---------
  ServiceAccount  cattle  cattle-system

3)通过用户seviceaccount找到secret信息,namespace

[root@k8s-node02 ~]# kubectl describe ServiceAccount cattle -n cattle-system
Name:                cattle
Namespace:           cattle-system
Labels:              <none>
Annotations:         <none>
Image pull secrets:  <none>
Mountable secrets:   cattle-token-tb7xx
Tokens:              cattle-token-tb7xx
Events:              <none>

4)通过secret找到token信息

[root@k8s-node02 ~]# kubectl describe secrets cattle-token-tb7xx -n cattle-system
Name:         cattle-token-tb7xx
Namespace:    cattle-system
Labels:       <none>
Annotations:  field.cattle.io/projectId: c-wpz72:p-wkqpb
              kubernetes.io/service-account.name: cattle
              kubernetes.io/service-account.uid: f2acfe4e-0699-4a1a-a8ff-f97a82ce8a0e

Type:  kubernetes.io/service-account-token

Data
====
ca.crt:     1058 bytes
namespace:  13 bytes
token:      eyJhbGciOiJSUzI1NiIsImtpZCI6Ijg2aUk3TVVuM1V2cnZ2bHAweTVvOUFUaGp0SEhTUjVZa1RrMmZEaTAwakUifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJjYXR0bGUtc3lzdGVtIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6ImNhdHRsZS10b2tlbi10Yjd4eCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJjYXR0bGUiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiJmMmFjZmU0ZS0wNjk5LTRhMWEtYThmZi1mOTdhODJjZThhMGUiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6Y2F0dGxlLXN5c3RlbTpjYXR0bGUifQ.GY3FWEQKi73HXfOEALGQrGGRB_mOPgVLf5pIIYo1Xsn6_98O5qaw9Gkx-_Yz_LCQcSw7VwxXGyryvY9PbWHhW4pwwKqcpnygrwgE3trXDdzna36rc6SCTGLBIteNgBkK0vtHWxRIau5l6aFKCMmuYoR3kAvziY9pFUpdNyqvnrSvge6MDOILcj0jn4nUbGZkFBzDEXFiotNmAWXiMLUKcS-81UedjKDFUIChLyL6FyCsDkcgqHuk52SjzQ75sWJFEd6x_NX2yQwpWXzvebNd5CfIN7fujUYL2fZ_Cx7dmihqaA2N_MMBXsuPU_DMWM2-NivtaKa8x10-OlHJtpdQwg





[root@k8s-node02 ~]# TOKEN=$(kubectl get  secrets cattle-token-tb7xx -n cattle-system -o jsonpath={.data.token} | base64 -d)
或
[root@k8s-node02 ~]# TOKEN=(kubectl describe secrets cattle-token-tb7xx -n cattle-system |grep "token:" |awk '{print $2}')



5)访问:

[root@k8s-node02 ~]# curl https://172.16.10.59:10250/metrics/cadvisor -k -H "Authorization: Bearer $TOKEN"

[root@k8s-node02 ~]# curl https://172.16.10.59:10250/metrics -k -H "Authorization: Bearer $TOKEN"

 

上面是用线程的用户和角色权限,也可以自定定义权限,角色,用户信息

下面就可以

第二种:pod访问

创建k8s的用户,用户分为普通用户和serviceAccount用户

useraccount:外部用户

serviceAccount:内部集群资源直接访问的用户

1.serviceAccount用户的创建:

1.1)创建一个namespace

[root@k8s-node02 ~]# kubectl create namespace wubo

1.2)创建serviceaccount 会自动创建一个secret资源

apiVersion: v1
kind: ServiceAccount
metadata:
  name: wubo-service-account
  namespace: wubo

查看serviceaccount 

[root@k8s-node02 ~]# kubectl get sa -n wubo wubo-service-account -o yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  creationTimestamp: "2024-01-22T04:35:54Z"
  name: wubo-service-account
  namespace: wubo
  resourceVersion: "14544"
  uid: 3db644bc-2f2a-4183-a0f2-c8178d288bde
secrets:
- name: wubo-service-account-token-2vxk4

 查看secret

[root@k8s-node02 ~]# kubectl get secrets -n wubo wubo-service-account-token-2vxk4 -o yaml
apiVersion: v1
data:
  ca.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUM0VENDQWNtZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFTTVJBd0RnWURWUVFERXdkcmRXSmwKTFdOaE1CNFhEVEkwTURFeU1qQXlOVFl3TWxvWERUTTBNREV4T1RBeU5UWXdNbG93RWpFUU1BNEdBMVVFQXhNSAphM1ZpWlMxallUQ0NBU0l3RFFZSktvWklodmNOQVFFQkJRQURnZ0VQQURDQ0FRb0NnZ0VCQU1tZDJEOVZxaHdzCjl6aEFMNDYvRzc0UGxHRC9yWkRHNHBHdlg0YWRNNVcxTUlySitXOFIzMzBOL2toazdoWTNTTnBudFRtY1NKQ0kKcm5UMCtMTjZMWTBqaFdtUDhGQTNJZWNRU3FNTmU0Wi9XUnB3bzBDK1lIV3lGMjFyNXhpMGZJOUxZcXQ1VHBWaApMVW43cGMrekhBQUR1RStTeE93QWw1QmNkNFZKK3ZzUkhUSWh5TnU4YmhFUGJqMVFHMDBOd20xMmZJMHNuRkU4CncrMEozb3V6NEVUcXFTSjBLVWpNenZFYnYxZjZ0K1d2d2puakZFNEVWWkJReFRQRGxlNkFqcExXZlBpMnJDRWYKeEhEbVkweUtsNk9FMHlZdjRQT3laSHdKclN1aW5walk1L01oUzh0OXRqVjJ0RGR2aUxKbFJuQi91MmxoZWJxLwpsYWh2dE9nY01FOENBd0VBQWFOQ01FQXdEZ1lEVlIwUEFRSC9CQVFEQWdLa01BOEdBMVVkRXdFQi93UUZNQU1CCkFmOHdIUVlEVlIwT0JCWUVGTDRqZVA0TmdKMnlURUNtZFFvdHVwL1dHVHJuTUEwR0NTcUdTSWIzRFFFQkN3VUEKQTRJQkFRQzQwMUhXYmRqYmthQnBTOE5iVlBvcEdPNFN1dnZFWm55YVlEcHdYZEVCWk5nSTVkS2hJSk9CcHhrNQpPVFh5ZW9adm9pL2lXcUlDOEVLZnFGZGRlU0Z6T0RZcHFsTHo2b1BoZUE2ZDJBbmFjUGJJZEE4VGF4VWpDNWJvCjRBMW1TVk04djVNcjQxSUZuTStVNHBKTXh6OGxuZUxRNkVBWjFWdWxWVWtnZlBiczZHczFpYW9hQXFKS05ZRngKOWZDWW9ub3A4YzB4ZzEvUEZBV0M0Z01zSzEwTTlEM04zbkNxcWlwdFJuekhRMTF1ZFpYUERwS3ZOZHdrSmpiUAo3WTdTMFFFVUF5K2pOVjlmcUswLzJienovWldNY3Q3SENPVnFGRlpMMm1WZU1nYytVY0ZFSlIrMUZROFEyeDJzCllTRUk1c2w0bXdLenhqNk5wc0ViZFlkcDgvTG8KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=
  namespace: d3Vibw==
  token: ZXlKaGJHY2lPaUpTVXpJMU5pSXNJbXRwWkNJNklqZzJhVWszVFZWdU0xVjJjbloyYkhBd2VUVnZPVUZVYUdwMFNFaFRValZaYTFSck1tWkVhVEF3YWtVaWZRLmV5SnBjM01pT2lKcmRXSmxjbTVsZEdWekwzTmxjblpwWTJWaFkyTnZkVzUwSWl3aWEzVmlaWEp1WlhSbGN5NXBieTl6WlhKMmFXTmxZV05qYjNWdWRDOXVZVzFsYzNCaFkyVWlPaUozZFdKdklpd2lhM1ZpWlhKdVpYUmxjeTVwYnk5elpYSjJhV05sWVdOamIzVnVkQzl6WldOeVpYUXVibUZ0WlNJNkluZDFZbTh0YzJWeWRtbGpaUzFoWTJOdmRXNTBMWFJ2YTJWdUxUSjJlR3MwSWl3aWEzVmlaWEp1WlhSbGN5NXBieTl6WlhKMmFXTmxZV05qYjNWdWRDOXpaWEoyYVdObExXRmpZMjkxYm5RdWJtRnRaU0k2SW5kMVltOHRjMlZ5ZG1salpTMWhZMk52ZFc1MElpd2lhM1ZpWlhKdVpYUmxjeTVwYnk5elpYSjJhV05sWVdOamIzVnVkQzl6WlhKMmFXTmxMV0ZqWTI5MWJuUXVkV2xrSWpvaU0yUmlOalEwWW1NdE1tWXlZUzAwTVRnekxXRXdaakl0WXpneE56aGtNamc0WW1SbElpd2ljM1ZpSWpvaWMzbHpkR1Z0T25ObGNuWnBZMlZoWTJOdmRXNTBPbmQxWW04NmQzVmlieTF6WlhKMmFXTmxMV0ZqWTI5MWJuUWlmUS5Sb3hOVlhBMVdnUXgxYUFiVUdJek5CeGZXVnVIVVRrdjJlVzhuTzFjeEVUY2txZUd3N1kyeWZsVEJwckVocDkzYkxkMjJsZVBFams4NjRXdTM5YmtDWFNQRE1GX09jbUhNUnN0M3ZNZEE1STZ0YVRySTVoSVVMekd2OUQ0Mm5HU1pPcmt5OERweDJ1UHFYcWdfdEZpNzh1SkRXZ283Yl9wS0lmX3pRM1FqNFpQbUlhQXNVczNuNk5OdTgwcUl1d2FaQ0xHaGxLTVR5TF9iSXBpRkhSUGFpa1JSaWNaaEU4bmgtR1hHYlVUVVNTZ2YwRkNDa1FxVXl6eTdubFBYMTFuZjdZYnJqdkJSVjB3bGFDU3dYak5feEI2UDJoQTFHWXhuSC1XLTEtS3RVY1lMVTBtZ1QzUFVXdlh2UUxjSS1wdm5ZZ3JEU0l1c2FGMFFEVjgzdFhWZHc=
kind: Secret
metadata:
  annotations:
    kubernetes.io/service-account.name: wubo-service-account
    kubernetes.io/service-account.uid: 3db644bc-2f2a-4183-a0f2-c8178d288bde
  creationTimestamp: "2024-01-22T04:35:54Z"
  managedFields:
  - apiVersion: v1
    fieldsType: FieldsV1
    fieldsV1:
      f:data:
        .: {}
        f:ca.crt: {}
        f:namespace: {}
        f:token: {}
      f:metadata:
        f:annotations:
          .: {}
          f:kubernetes.io/service-account.name: {}
          f:kubernetes.io/service-account.uid: {}
      f:type: {}
    manager: kube-controller-manager
    operation: Update
    time: "2024-01-22T04:35:54Z"
  name: wubo-service-account-token-2vxk4
  namespace: wubo
  resourceVersion: "14543"
  uid: 70ae3e2a-1b91-498d-9bc8-56c8522d42b1
type: kubernetes.io/service-account-token

 此时就可以获取token了和ca.crt

[root@k8s-node02 ~]# kubectl get secret  -n wubo wubo-service-account-token-2vxk4 -o jsonpath={.data.token} | base64 -d

 namespace:

[root@k8s-node02 ~]# kubectl get secret  -n wubo wubo-service-account-token-2vxk4 -o jsonpath={.data.namespace} |base64  -d

ca.crt

[root@k8s-node02 ~]# kubectl get secret  -n wubo wubo-service-account-token-2vxk4 -o jsonpath={.data.ca\\.crt} |base64  -d

 1.3)创建全局的资源权限ClusterRole是全局的,不分namespace

---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: wubo-cluster-role
rules:
- apiGroups:
  - ""
  resources:
  - '*'
  #- ["pods","pods/log","pods/exec", "pods/attach", "pods/status","services","nodes/metrics","nodes/stats","nodes/proxy",]
  verbs:
  #- ["get", "watch", "list", "create", "update", "patch", "delete","exec"]
  - '*'

1.4)创建绑定  用户和集群角色绑定

---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: wubo-cluster-role-binding
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: wubo-cluster-role
subjects:
- kind: ServiceAccount
  name: wubo-service-account
  namespace: wubo

all文件: 

[root@k8s-node02 ~]# cat auth.yaml 
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: wubo-cluster-role
rules:
- apiGroups:
  - ""
  resources:
  - '*'
  #- ["pods","pods/log","pods/exec", "pods/attach", "pods/status","services","nodes/metrics","nodes/stats","nodes/proxy",]
  verbs:
  #- ["get", "watch", "list", "create", "update", "patch", "delete","exec"]
  - '*'
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: wubo-service-account
  namespace: wubo
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: wubo-cluster-role-binding
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: wubo-cluster-role
subjects:
- kind: ServiceAccount
  name: wubo-service-account
  namespace: wubo

  • 13
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: K8sKubernetes)是一种开源的容器编排系统,可用于部署、管理和自动扩展容器化的应用程序。在搭建 K8s 集群之前,我们需要先准备好以下环境: - 一组至少 3 台具有 Ubuntu 16.04 操作系统的服务器(1 个 Master 节点和至少 2 个 Worker 节点)。 - 所有服务器的 root 用户的 SSH 密钥登录已启用。 以下是搭建 K8s 集群的详细步骤: 第一步:安装 Docker 在所有节点上安装 Docker,可以通过以下命令安装: sudo apt-get update sudo apt-get install -y docker.io 启动 Docker: sudo systemctl start docker sudo systemctl enable docker 第二步:安装 Kubernetes 在所有节点上安装 kubeadm、kubelet 和 kubectl,可以通过以下命令安装: sudo apt-get update && sudo apt-get install -y apt-transport-https curl curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list deb https://apt.kubernetes.io/ kubernetes-xenial main EOF sudo apt-get update sudo apt-get install -y kubelet kubeadm kubectl sudo apt-mark hold kubelet kubeadm kubectl 第三步:初始化 Master 节点 在 Master 节点上执行以下命令: sudo kubeadm init --pod-network-cidr=10.244.0.0/16 该命令将使用默认配置初始化 K8s Master。 在命令的末尾,您将看到以下输出: Your Kubernetes master has initialized successfully! To start using your cluster, you need to run the following as a regular user: mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config You should now deploy a pod network to the cluster. Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at: https://kubernetes.io/docs/concepts/cluster-administration/addons/ 您需要注意以下内容: - 节点加入命令(例如 kubeadm join) - 用于访问 K8s 集群的 kubeconfig 配置文件。 第四步:安装网络插件 在 K8s 网络中构建通信所需的插件是必需的。 可以使用 Flannel,该插件是最常见和推荐的插件之一,可以通过以下命令进行安装: kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml 第五步:加入 Worker 节点 将 Worker 节点加入 K8s 集群中,可以通过以下命令完成: kubeadm join <Master 节点的 IP 地址>:<Master 节点端口号> --token <Token> --discovery-token-ca-cert-hash <SHA256 值> 至此,K8s 集群搭建完毕,您现在可以使用 kubectl 命令与 K8s 集群进行交互,例如: kubectl get nodes 该命令将显示您的所有节点。 ### 回答2: Kubernetes(简称K8s)是一个由谷歌出品的开源容器管理平台,它实现了自动化容器的部署、扩展、滚动升级、故障检测和修复等功能。在新一代微服务应用架构中,K8s已经成为必不可少的基础设施组件。本文将介绍如何在K8s版本1.8.3上搭建集群。 1. 硬件准备 在搭建K8s集群之前,需要确定好硬件配置,确保集群能够长期稳定运行。一般来说,每个节点至少需要2个CPU、4GB内存、50GB的磁盘空间以及1个网络接口。 2. 软件准备 在搭建K8s集群之前,需要安装好以下软件:Docker、Kubeadm、Kubelet、Kubectl等。可以通过以下命令安装: ``` $ sudo apt-get update $ sudo apt-get install -y docker.io kubelet kubeadm kubectl kubernetes-cni ``` 安装好软件之后,需要对Docker和Kubernetes做一些配置,具体操作可以参考Kubernetes官方文档。 3. 初始化Master节点 通过Kubeadm初始化Master节点,可以使用以下命令: ``` $ sudo kubeadm init --pod-network-cidr=10.244.0.0/16 ``` 其中--pod-network-cidr参数指定了Pod网络的CIDR地址。 初始化成功之后,会输出一些信息,包括Kubernetes的ApiServer、Token等信息。需要将这些信息保存下来备用。 4. 部署网络插件 Kubernetes的网络模型是基于容器网络接口(CNI)的,需要选择一个支持CNI的网络插件进行部署。目前比较流行的网络插件有Calico、Flannel、Weave等。 以Calico为例,可以通过以下命令部署网络插件: ``` $ kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml ``` 5. 加入Worker节点 将Worker节点加入集群很简单,只需要在Worker节点上执行以下命令: ``` $ sudo kubeadm join <Master节点IP>:<Master节点端口> --token <Token值> --discovery-token-ca-cert-hash <证书Hash值> ``` 其中,--token和--discovery-token-ca-cert-hash参数可以在Master节点上执行以下命令来获取: ``` $ kubeadm token create --print-join-command ``` 至此,K8s集群的搭建工作就完成了。在实际环境中,还需要进行更多配置和调整,如制定调度策略、部署应用程序等,详细操作可以参考Kubernetes官方文档。 ### 回答3: Kubernetes(简称K8s)是一款用于容器编排和管理的开源平台。在生产环境中,K8s可以帮助我们管理大量的容器,并实现高可用性、弹性伸缩等功能。下面将介绍K8s集群搭建的详细步骤。 首先需要准备好一台主机作为Master,其他的主机作为Nodes。将所有的主机都装上Kubernetes所需要的软件,如:Docker、slinux、kubeadm、kubelet等。 一、Master节点 1. 安装docker和kubelet 在Master节点上安装docker和kubelet来管理所有的容器: 安装Docker和kubelet: sudo apt-get update -y sudo apt-get install docker.io -y sudo apt-get install kubeadm kubelet kubernetes-cni 为了能够查看Kubernetes的状态,还需要安装kubectl: sudo apt-get install kubectl 2. 配置Master 在配置Master之前,需要选择一个Pod网络插件。我们可以选择 Calico、Weave Net等插件,这里选择calico。 安装calico插件: sudo kubectl apply -f https://docs.projectcalico.org/v3.9/manifests/calico.yaml 接下来配置Master: sudo kubeadm init --pod-network-cidr=10.244.0.0/16 操作完成后在控制台会输出相应的配置参数,可以先暂存一下,接下来需要用此参数去连接Node节点。 3. 安装网络 在Master节点上安装网络,用来为所有的节点提供网络服务: sudo kubectl apply -f https://docs.projectcalico.org/v3.9/manifests/calico.yaml 不过可能会遇到网络拉取问题,可以额外配置一下,在/opt/cni/bin下面放置calico文件夹,在calico中应该有多个文件和文件夹,这样就能解决网络连接问题。 4. 连接Node 将Master节点输出的参数使用kubeadm join命令连接到每个Node,连接成功后Node节点的状态应处于Ready状态: kubeadm join <master-ip>:<master-port> --token <token> --discovery-token-ca-cert-hash <hash> 二、Node节点 1. 安装docker和kubelet 在Node节点上安装docker和kubelet来管理所有的容器: sudo apt-get update -y sudo apt-get install docker.io -y sudo apt-get install kubeadm kubelet kubernetes-cni 2. 连接到Master 将Node节点使用kubeadm join命令连接到Master,连接成功后Node节点的状态应处于Ready状态: kubeadm join <master-ip>:<master-port> --token <token> --discovery-token-ca-cert-hash <hash> 三、验证 1. 查看节点状态 使用 kubectl get nodes 命令查看节点状态,如下所示: NAME STATUS ROLES AGE VERSION k8s-master Ready master 18s v1.8.3 k8s-node-1 Ready <none> 12s v1.8.3 k8s-node-2 Ready <none> 5s v1.8.3 2. 部署测试应用 使用kubectl create deployment命令来部署一个测试应用: kubectl create deployment nginx --image=nginx 使用 kubectl get pods 命令查看应用的状态,如下所示: NAME READY STATUS RESTARTS AGE nginx-5c7c5b974-n9bjd 1/1 Running 0 10s 使用kubectl expose deployment命令来暴露服务: kubectl expose deployment nginx --port=80 --type=NodePort 使用kubectl get service命令查看服务状态,如下所示: NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 13m nginx NodePort 10.98.80.0 <none> 80:30001/TCP 44s 可以访问节点的IP地址以及端口号,即可访问Nginx测试应用。 总结 Kubernetes是一个非常好用的容器编排平台,使用Kubernetes可以简化容器的部署和管理,提高应用的可靠性和可维护性。本文主要介绍了Kubernetes集群搭建的详细步骤,希望对大家有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值