Kubernetes集群安全机制
Kubernetes集群安全机制概述当我们访问K8S集群时,需要经过三个步骤完成具体操作 认证 鉴权【授权】 准入控制 进行访问的时候,都需要经过 apiserver, apiserver做统一协调,比如门卫 访问过程中,需要证书、token、或者用户名和密码 如果访问pod需要serviceAccount 认证对外不暴露8080端口,只能内部访问,对外使用的端口6443 客户端身份认证常用方式 https证书认证,基于ca证书 http token认证,通过token来识别用户 http基本认证,用户名 + 密码认证 鉴权基于RBAC进行鉴权操作 基于角色访问控制 准入控制就是准入控制器的列表,如果列表有请求内容就通过,没有的话 就拒绝 RBAC介绍基于角色的访问控制,为某个角色设置访问内容,然后用户分配该角色后,就拥有该角色的访问权限 k8s中有默认的几个角色 role:特定命名空间访问权限 ClusterRole:所有命名空间的访问权限 角色绑定 roleBinding:角色绑定到主体 ClusterRoleBinding:集群角色绑定到主体 主体 us ...
Kubernetes核心技术Ingress
Kubernetes核心技术Ingress前言原来我们需要将端口号对外暴露,通过 ip + 端口号就可以进行访问 原来是使用Service中的NodePort来实现 在每个节点上都会启动端口 在访问的时候通过任何节点,通过ip + 端口号就能实现访问 但是NodePort还存在一些缺陷 因为端口不能重复,所以每个端口只能使用一次,一个端口对应一个应用 实际访问中都是用域名,根据不同域名跳转到不同端口服务中 Ingress和Pod关系pod 和 ingress 是通过service进行关联的,而ingress作为统一入口,由service关联一组pod中 首先service就是关联我们的pod 然后ingress作为入口,首先需要到service,然后发现一组pod 发现pod后,就可以做负载均衡等操作 Ingress工作流程在实际的访问中,我们都是需要维护很多域名, a.com 和 b.com 然后不同的域名对应的不同的Service,然后service管理不同的pod 需要注意,ingress不是内置的组件,需要我们单独的安装 使用Ingress步骤如下所示 部 ...
Kubernetes核心技术Helm
Kubernetes核心技术HelmHelm就是一个包管理工具【类似于npm】 为什么引入Helm首先在原来项目中都是基于yaml文件来进行部署发布的,而目前项目大部分微服务化或者模块化,会分成很多个组件来部署,每个组件可能对应一个deployment.yaml,一个service.yaml,一个Ingress.yaml还可能存在各种依赖关系,这样一个项目如果有5个组件,很可能就有15个不同的yaml文件,这些yaml分散存放,如果某天进行项目恢复的话,很难知道部署顺序,依赖关系等,而所有这些包括 基于yaml配置的集中存放 基于项目的打包 组件间的依赖 但是这种方式部署,会有什么问题呢? 如果使用之前部署单一应用,少数服务的应用,比较合适 但如果部署微服务项目,可能有几十个服务,每个服务都有一套yaml文件,需要维护大量的yaml文件,版本管理特别不方便 Helm的引入,就是为了解决这个问题 使用Helm可以把这些YAML文件作为整体管理 实现YAML文件高效复用 使用helm应用级别的版本管理 Helm介绍Helm是一个Kubernetes的包管理工具,就像Linux ...
Kubernetes持久化存储
Kubernetes持久化存储前言之前我们有提到数据卷:emptydir ,是本地存储,pod重启,数据就不存在了,需要对数据持久化存储 对于数据持久化存储【pod重启,数据还存在】,有两种方式 nfs:网络存储【通过一台服务器来存储】 步骤持久化服务器上操作 找一台新的服务器nfs服务端,安装nfs 设置挂载路径 使用命令安装nfs 1yum install -y nfs-utils 首先创建存放数据的目录 1mkdir -p /data/nfx 设置挂载路径 1234# 打开文件vim /etc/exports# 添加如下内容/data/nfs *(rw,no_root_squash) 执行完成后,即部署完我们的持久化服务器 Node节点上操作然后需要在k8s集群node节点上安装nfs,这里需要在 node1 和 node2节点上安装 1yum install -y nfs-utils 执行完成后,会自动帮我们挂载上 启动nfs服务端下面我们回到nfs服务端,启动我们的nfs服务 1systemctl start nfs K8s集群部署应用最后我们在k8s集群上 ...
Kubernetes集群资源监控
Kubernetes集群资源监控概述监控指标一个好的系统,主要监控以下内容 集群监控 节点资源利用率 节点数 运行Pods Pod监控 容器指标 应用程序【程序占用多少CPU、内存】 监控平台使用普罗米修斯【prometheus】 + Grafana 搭建监控平台 prometheus【定时搜索被监控服务的状态】 开源的 监控、报警、数据库 以HTTP协议周期性抓取被监控组件状态 不需要复杂的集成过程,使用http接口接入即可 Grafana 开源的数据分析和可视化工具 支持多种数据源 部署prometheus首先需要部署一个守护进程 1234567891011121314151617181920212223242526272829303132333435363738394041---apiVersion: apps/v1kind: DaemonSetmetadata: name: node-exporter namespace: kube-system labels: k8s-app: node-exporterspec: selecto ...
Kubernetes搭建高可用集群
Kubernetes搭建高可用集群前言之前我们搭建的集群,只有一个master节点,当master节点宕机的时候,通过node将无法继续访问,而master主要是管理作用,所以整个集群将无法提供服务 高可用集群下面我们就需要搭建一个多master节点的高可用集群,不会存在单点故障问题 但是在node 和 master节点之间,需要存在一个 LoadBalancer组件,作用如下: 负载 检查master节点的状态 对外有一个统一的VIP:虚拟ip来对外进行访问 高可用集群技术细节高可用集群技术细节如下所示: keepalived:配置虚拟ip,检查节点的状态 haproxy:负载均衡服务【类似于nginx】 apiserver: controller: manager: scheduler: 高可用集群步骤我们采用2个master节点,一个node节点来搭建高可用集群,下面给出了每个节点需要做的事情 初始化操作我们需要在这三个节点上进行操作 12345678910111213141516171819202122232425262728293031323334353637 ...
Kubernetes容器交付介绍
Kubernetes容器交付介绍如何在k8s集群中部署Java项目 容器交付流程 开发代码阶段 编写代码 编写Dockerfile【打镜像做准备】 持续交付/集成 代码编译打包 制作镜像 上传镜像仓库 应用部署 环境准备 Pod Service Ingress 运维 监控 故障排查 应用升级 k8s部署Java项目流程 制作镜像【Dockerfile】 上传到镜像仓库【Dockerhub、阿里云、网易】 控制器部署镜像【Deployment】 对外暴露应用【Service、Ingress】 运维【监控、升级】 k8s部署Java项目准备Java项目第一步,准备java项目,把java进行打包【jar包或者war包】 依赖环境在打包java项目的时候,我们首先需要两个环境 java环境【JDK】 maven环境 然后把java项目打包成jar包 1mvn clean install 编写Dockerfile文件Dockerfile 内容如下所示 1234FROM openjdk:8-jdk-alpineVOLUME /tmpADD ./target/demo ...
Kubernetes可视化界面kubesphere
Kubernetes可视化界面kubesphere前言Kubernetes也提供了默认的dashboard页面,但是功能不是很强大,这里就不使用了 而是采用Kubesphere大桶全部的devops链路,通过kubesphere集成了很多套件 https://kubesphere.io/zh/ :集群要求高 https://kuboard.cn/:kuboard也不错,集群要求不高【轻量级】 简介KubeSphere是一款面向云原生设计的开源项目,在目前主流容器调度平台Kubernetes之上构建的分布式多租户容器管理平台,提供简单易用的操作界面以及向导式操作方式,在降低用户使用容器调度平台学习成本的同时,极大降低开发、测试、运维的日常工作的复杂度。 安装前提条件https://kubesphere.com.cn/docs/quick-start/minimal-kubesphere-on-k8s/ Kubernetes 版本必须为 “1.15.x,1.16.x,1.17.x 或 1.18.x”; 确保您的计算机满足最低硬件要求:CPU > 1 核,内存 > 2 G; ...
Kubernetes配置默认存储类
Kubernetes配置默认存储类前言今天在配置Kubesphere的时候,出现了下面的错误 经过排查,发现是这个原因 我通过下面命令,查看Kubernetes集群中的默认存储类 1kubectl get storageclass 发现空空如也,所以问题应该就出现在这里了~,下面我们给k8s集群安装上默认的存储类 安装nfs我们使用的是nfs来作为k8s的存储类 首先找一台新的服务器,作为nfs服务端,然后进行 nfs的安装 【服务器:192.168.177.141】 然后使用命令安装nfs 1yum install -y nfs-utils 首先创建存放数据的目录 1mkdir -p /data/k8s 设置挂载路径 1234# 打开文件vim /etc/exports# 添加如下内容/data/k8s *(rw,no_root_squash) node节点上安装然后需要在k8s集群node节点上安装nfs,这里需要在 node1 和 node2节点上安装 1yum install -y nfs-utils 执行完成后,会自动帮我们挂载上 启动nfs在node节点上配置 ...
使用Rancher2.0搭建Kubernetes集群
使用Rancher2.0搭建Kubernetes集群中文文档:https://docs.rancher.cn/docs/rancher2 安装Rancher2.0使用下面命令,我们快速的安装 1234# 启动 rancher【没有的话会从后台拉取】docker run -d -p 80:80 -p 443:443 rancher/rancher:v2.0.0# 查看docker ps -a 我们可以来查看我们的日志 1docker logs eloquent_curie 同时,我们可以直接访问我们新建的Rancher集群 1https://192.168.177.150/ 第一次登录,需要我们填写密码,我们自己的密码后,点击下一步,完成后即可进入到我们的控制台 导入K8S集群在我们安装好Rancher2.0后,我们就可以导入我们的K8S集群进行管理了 首先我们点击 Add Cluster ,然后选择 IMPORT 导入我们的集群 然后会有Add Cluster页面,下面我们通过命令来添加 我们首先选择上面这条,在我们的master节点上执行,将我们的集群被Ranche ...