首页 > 其他分享 >基础网络安全——K8S关键概念及搭建过程中遇到的问题补充

基础网络安全——K8S关键概念及搭建过程中遇到的问题补充

时间:2024-09-05 22:24:24浏览次数:6  
标签:网络安全 容器 kube node docker K8S pod 搭建

一、K8S集群基本概念

基础网络安全——K8S关键概念及搭建过程中遇到的问题补充_基础安全

              k8s是一组服务器集群,是一个分布式的容器编排系统,对运行在集群上的容器进行管理,K8S集群包括控制平面(Control Plane)以及1个或者多个工作节点(worker node),而控制平面包括master node以及etcd节点。并且在这两种类型的节点上运行多种不同的服务,如上图所示。

     (一)相关组件

       1、控制平台:

master节点运行的组件:

              kube-apiserver:暴露K8S HTTP API服务,接受客户端操作k8s的指令

              kube-schduler:从多个worker node节点中选举一个节点来启动服务

              kube-controller-manager:运行controller服务,并向K8S集群API发送指令

              cloud-controller manager:这是一个可选的服务,用于提供向云服务商的连接

              etcd服务:

              k8s的数据库,提供一致性以及高可用的键值存储服务,用来注册节点、服务、记录账户

      2、work节点的组件:

              kubelet:向docker发送指令管理docker容器的

              kubeproxy:管理docker容器的网络,如分配IP,暴露端口等

              Container runtime:提升容器的运行时环境。

       除了上述两个主要主件之外,还包括一系列的插件,如DNS、WebUI等。

      (二)主要概念

Pod:pod是k8s最小部署单元,K8S不能直接启动docker,一个pod中可以有一个或者多个容器,或者一组容器,它们共享存储及网络资源,以及如何运行这些容器的说明。

       Controllers:这是比Pod更加高抽象层级的工作负载对象,在K8S的控制平台完成对容器的自动化控制,如pod的启动、停止、删除等,包括多个控制器,如ReplicaSet、Deployment、StatefulSet、DaemonSet、Job、Cronjob。

       service:service用于将一组pod关联起来,提供一个统一的访问入口,即使pod地址发生改变,这个统一入口也不会变化,可以保证用户访问不受影响

       label:标签,一组pod是一个统一的标签,service是通过标签和一组pod进行关联的

       namespace:名称空间,在K8S中用来隔离一组资源的机制,K8S初始情况下有4个namespace,分别是default、kube-node-lease、kube-public、kube-system。用于在多个团队、项目使用的环境中进行资源隔离。

二、环境部署中遇到的问题

问题:kubectl get pods -n kube-system 始终显示在init状态:

1、 查看worker节点kubelet日志:

tail -f /opt/kubernetes/logs/kubelet.INFO

E0818 13:27:53.180431   21851 remote_runtime.go:105] RunPodSandbox from runtime service failed: rpc error: code = Unknown desc = failed pulling image "lizhenliang/pause-amd64:3.0": error pulling image configuration: Get https://production.cloudflare.docker.com/registry-v2/docker/registry/v2/blobs/sha256/99/99e59f495ffaa222bfeb67580213e8c28c1e885f1d245ab2bbe3b1b1ec3bd0b2/data?verify=1723961848-ZrNEQWYbkJA19yEi7AsbB3qFiEs%3D: dial tcp 108.160.165.53:443: i/o timeout

E0818 13:27:53.180462   21851 kuberuntime_sandbox.go:68] CreatePodSandbox for pod "kube-flannel-ds-amd64-gspjg_kube-system(80f419cd-27c1-460a-8d32-964801feb605)" failed: rpc error: code = Unknown desc = failed pulling image "lizhenliang/pause-amd64:3.0": error pulling image configuration: Get https://production.cloudflare.docker.com/registry-v2/docker/registry/v2/blobs/sha256/99/99e59f495ffaa222bfeb67580213e8c28c1e885f1d245ab2bbe3b1b1ec3bd0b2/data?verify=1723961848-ZrNEQWYbkJA19yEi7AsbB3qFiEs%3D: dial tcp 108.160.165.53:443: i/o timeout

基础网络安全——K8S关键概念及搭建过程中遇到的问题补充_k8s_02

经排查,在kubelet.conf的配置文件中配置了一个参数:

--pod-infra-container-image=lizhenliang/pause-amd64:3.0"

该参数指定了基础镜像,所以会一直从这里拉取镜像,当镜像不可访问时即会失败。修改为:--pod-infra-container-image=registry.cn-hangzhou.aliyuncs.com/google-containers/pause-amd64:3.0"

2、 在master节点修改kube-flannel.yml文件中镜像拉取的地址:

image: registry.cn-shanghai.aliyuncs.com/leozhanggg/flannel:v0.12.0-amd64,有两处需要修改,如下:

基础网络安全——K8S关键概念及搭建过程中遇到的问题补充_flannel_03

三、扩容和更新

根据线上需求,扩容和缩容是常会遇到的问题。Scaling 是通过更改 Deployment 中的副本数量实现的。一旦您有应用程序的多个实例,您将能够滚动更新,而不会停止服务。通过 kubectl scale 指令来扩容和缩容:

kubectl get pods -L app --show-labels

# 输出如下

NAME                         READY   STATUS    RESTARTS   AGE     APP          LABELS

hello-node-66f488898-mbwmm   1/1     Running   2          3h22m   hello-node   app=hello-node,pod-template-hash=66f488898

# 调查可知,扩充pods数一般就扩充

kubectl scale --replicas=2 deployment/hello-node

再查看当前pods:

NAME                         READY   STATUS    RESTARTS   AGE

hello-node-66f488898-22nrh   1/1     Running   0          68s

hello-node-66f488898-mbwmm   1/1     Running   2          3h43m

四、容器网络补充

(一)docker网络补充

系统上运行docker时,docker容器与主机之间的网络关系如下:

基础网络安全——K8S关键概念及搭建过程中遇到的问题补充_flannel_04

1、 在主机上启动docker服务时,主机上会生成docker0虚拟网卡,该网卡为桥接模式,并且docker将在私有网段中随机分配一个地址给docker0,后续启动容器时,容器内的网卡也将分配该网段的IP地址。

基础网络安全——K8S关键概念及搭建过程中遇到的问题补充_flannel_05

2、 新建docker容器时,自动创建veth pair接口对,分别为eth0及vethXX,其中eth0在容器内,vethXX连接到docker0上。

基础网络安全——K8S关键概念及搭建过程中遇到的问题补充_k8s_06

(二)K8S flannel网络补充

1、 部署K8S后,通过部署网络插件实现网络的互联互通,主流的插件有flannel,calico等,默认支持flannel插件,部署插件后,可以看到多了cni0网卡,该网卡同样为桥接模式:

基础网络安全——K8S关键概念及搭建过程中遇到的问题补充_基础安全_07

2、 此时就会有docker0以及cni0两张虚拟网卡,cni0将替换docker0,容器的vethXX接口将会桥接到cni0上面:

基础网络安全——K8S关键概念及搭建过程中遇到的问题补充_k8s_08

3、 进入到容器里面查看IP地址,容器的IP和cni0在同一个网段:

基础网络安全——K8S关键概念及搭建过程中遇到的问题补充_k8s_09

五、其他命令补充:

1、创建命名空间:

[root@k8s-master1 ~]# kubectl create ns test

namespace/test created

2、在指定命名空间中创建pod:

[root@k8s-master1 ~]# kubectl create deploy nginxdemo2 --image=nginx:1.8 -n test

deployment.apps/nginxdemo2 created

3、在master上进入pod:

[root@k8s-master1 ~]# kubectl exec -it nginxdemo2-54fb4895fc-dm29k -n test /bin/bash

root@nginxdemo2-54fb4895fc-dm29k:/#

进入pod实际上就是进入了容器,和在worker上通过docker exec –it 是一样的。

标签:网络安全,容器,kube,node,docker,K8S,pod,搭建
From: https://blog.51cto.com/u_9652359/11930670

相关文章

  • 三、搭建网站服务器超详细步骤——FinalShell下载安装使用流程(免费国产的SSH工具)+宝塔
    前言本篇博客是搭建网站服务器模块下的第3部分  FinalShell下载安装使用流程  在分享这篇博客之前,首先讲一下,FinalShell软件是干什么用的,用大白话进行说明一下:这个软件是一款远程控制和管理服务器的软件,通过SSH协议与远程服务器进行连接,去操控一系列的命令信息。就像......
  • 如何在IDEA里面搭建VUE脚手架并成功运行
    如何在IDEA里面成功搭建VUE脚手架并在IDEA成功运行:先在IDEA里面成功搭建一个maven工程然后在本地打开项目并创建一个文件夹(我这里创建的是blog-web)点进刚刚创建的文件夹进入命令行模式安装VUE命令:npminstall-g@vue/cli输入命令查看是否安装成功命令:vue--version......
  • BEVFormer复现(使用docker搭建训练环境)
    文章目录一、使用docker创建环境1.1创建容器1.2在容器中安装常用的包1.3安装miniconda1.4安装Pytorch二、环境配置2.1下载源码2.2安装mmcv-full2.3安装mmdet和mmseg2.4从源码安装mmdet3d2.5安装Detectron2和Timm2.6下载预训练模型三、数据准备3.1下载数据集......
  • 中间件解析漏洞(附环境搭建教程)
    ⼀:IIS解析漏洞环境资源:https://download.csdn.net/download/Nai_zui_jiang/89717504环境安装windows2003+iis61.创建新的虚拟机2.在下⼀步中选择我们的iso⽂件镜像vm已主动识别到windows20033.产品密钥⽹上搜⼀个密码自己设置一个简单的,这里我用的......
  • 3、【实战中提升自己】华为 华三中小型企业网络架构搭建 【MSTP、链路聚合、VRRP部署
     1 拓扑与说明         某公司的网络架构,这样的架构在目前的网络中是在常见的,假设您接收一个这样的网络,应该如何部署,该实战系列,就是一步一步讲解,如何规划、设计、部署这样一个环境,这里会针对不同的情况给出不同的讲解,比如拓扑中有2个ISP,假设客户需求是,想实现主备的......
  • K8S 中的 Node 管理
    1.Node的扩缩容在实际生产系统中,经常遇到服务器容量不足的情况,这时就需要购买新的服务器,对应用系统进行水平扩展以实现扩容。在k8s中,对一个新的node的加入非常简单,只需要在node节点上安装Docker、kubelet和kube-proxy服务,然后将kubelet和kube-proxy的启动参数中的master url指定为......
  • k8s介绍
    ⼀、编排分类单机容器编排:docker-compose容器集群编排:dockerswarm、mesos+marathon、kubernetes应⽤编排:ansible(模块,剧本,⻆⾊)⼆、系统管理进化史1.传统部署时代早期,各个组织是在物理服务器上运⾏应⽤程序。由于⽆法限制在物理服务器中运⾏的应⽤程序资源使⽤,......
  • Opencl从零实战(一)--windows搭建开发环境
    系统win11visualstudio2022opencl3.0库:Releases·KhronosGroup/OpenCL-SDK(github.com)在新建的解决方案中项目->[项目名称]和属性点选c/c++->常规->附件包含目录->编辑,将自己下载的oepnclsdk的include路径填进去,作为头文件的引用目录点选链接器->常规->附加库......
  • VUE环境搭建之创建vue项目并启动
    一、打开cmd,创建项目名vuecreatemy-project2二、下一步选择组件三、选择vue版本四、css选择五、config选择六、linesave选择七、配置保存选择八、project选择九、安装完成十、启动项目cdxxx项目路径npmrunserve......
  • 09.搭建一套小的集群 实现手动的代码上线
    搭建一套小的集群实现手动的代码上线lb192.168.111.21web01192.168.111.22web02192.168.111.23所有机器都安装nginx;yuminstallnginx-y1.配置负载均衡[root@lb01~]#cat/etc/nginx/conf.d/proxy_html.quyunlong.com.confupstreamhtml{server192.168.111.......