Kuebernetes网络管理

Kuebernetes网络管理

本章用到的资源请访问下面的网址
https://download.csdn.net/download/weixin_54373617/18444746

资源配置

系统主机名IP配置
centos 7.9master192.168.10.1062C 4G
centos 7.9node1192.168.10.1072C 4G
centos 7.9node2192.168.10.1082C 4G

基础环境

  • 所有节点修改为对应的主机名
    master节点
    [root@localhost ~]# hostnamectl set-hostname master
    [root@localhost ~]# su
    [root@master ~]#
    node1节点
    [root@localhost ~]# hostnamectl set-hostname node1
    [root@localhost ~]# su
    [root@node1 ~]#
    node2节点
    [root@localhost ~]# hostnamectl set-hostname node2
    [root@localhost ~]# su
    [root@node2 ~]#

  • 所以节点关闭防火墙
    systemctl stop firewalld
    systemctl disable firewalld

  • 所以节点关闭selinux
    sed -i “s/^SELINUX=*/SELINUX=disabled/g” /etc/selinux/config
    setenforce 0

  • 所以节点关闭swap
    swapoff -a # 临时关闭
    vim /etc/fstab 注释掉swap那一行 # 永久关闭之后要重启服务器
    在这里插入图片描述#永久关闭swap交换分区

  • 所有节点重启服务器
    init 6

    reboot

  • 所有节点添加主机名与IP对应关系
    在这里插入图片描述

  • 将桥接的IPv4流量传递到iptables的链(所有机器执行)
    在这里插入图片描述[root@master ~]# sysctl --system

  • 所有节点安装docker
    curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
    启动服务
    systemctl start docker
    systemctl enable docker
    配置加速,并设置驱动
    在这里插入图片描述
    画横线的加速地址可以换成自己的加速地址,这里用的是我自己的阿里镜像源的加速地址
    进入阿里云官网登录后——控制台——搜索框搜索“容器镜像服务”——镜像工具——选择centos的镜像加速地址
    这样就能找到自己的镜像加速地址了
    加载daemon并重启docker
    systemctl daemon-reload
    systemctl restart docker

  • 所有节点添加阿里云YUM源
    在这里插入图片描述

  • 所有节点安装kubeadm,kubelet和kubectl
    yum install -y kubelet-1.16.0 kubeadm-1.16.0 kubectl-1.16.0

systemctl start kubelet
systemctl enable kubelet

部署

初始化master节点
#只在master节点执行
#由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址
还有一种办法是直接把下载好的镜像上传到服务器中,然后在导入到docker中这样就很快了
在这里插入图片描述然后再用for循环执行一下
[root@master images]# for i in $(ls); do docker load < $i; done
#执行成功以后最后结果会输出
在这里插入图片描述红:master节点ip
黄:kubernetes版本
蓝:service的IP范围,集群内容器的IP范围
绿:pod的IP地址范围

执行成功以后最后几行结果会输出以下信息,第一个是master节点执行的命令
第二个是node节点加入集群使用的,把这个命令复制粘贴到需要加入群集的节点执行就行了(这里每个人生成的都不一样,按照自己生成的执行)
在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述
查看节点状态,现在是NotReady状态
在这里插入图片描述

安装Pod网络插件(CNI)
上传写好的yaml文件
kubectl apply -f calico-3.13.1.yaml

查看节点信息
在这里插入图片描述网络插件安装好之后每个节点状态都是Ready状态了。

创建命名空间
命令格式:
kubectl create ns 名字
[root@master ~]# kubectl create ns policy-demo

查看所有命名空间
在这里插入图片描述

查看命名空间
命令格式:
kubectl get ns 名字

在命名空间中创建副本
命令格式:
kubectl run --namespace=命名空间名字 副本名 --replicas=副本数 --image=镜像名

在 policy-demo 命名空间中创建两个副本的 Nginx Pod
首先先上传nginx镜像到服务中,然后在上传到docker中,也可以不用上传,会自动联网获取的

[root@master ~]# docker load < nginx.tar

[root@master ~]# kubectl run --namespace=policy-demo nginx --replicas=2 --image=nginx

查看所属命名空间的pod
命令格式:
kubectl get pod -n 命名空间名
在这里插入图片描述

查看所有pod所属的命名空间
kubectl get pod --all-namespaces(命名空间)
在这里插入图片描述
查看所有pod所属的命名空间并且查看都在哪些节点上运行
kubectl get pod --all-namespaces -o wide
在这里插入图片描述

查看所属命名空间中某个pod的ip和具体在哪个几点运行
命令格式:
kubectl get pod -n 命名空间名 pod名字 -o wide
kubectl get pod -n policy-demo nginx-6db489d4b7-tdds7 -o wide
在这里插入图片描述

通过服务(service)暴露 Nginx 的 80 端口
命令格式:
kubectl expose --namespace=命名空间名 deployment 服务名 --port=80

查看服务的详细信息,显示了服务名称,类型,集群ip,端口,时间等信息
命令格式:
kubectl get service(可简写为svc) -n 命名空间名

注意:如果只执行 kubectl get svc 查看的是默认的命名空间default,所以一般执行时都要跟上所属的名空间名
在这里插入图片描述

创建一个临时的pod服务访问nginx
命令格式:
kubectl run --namespace=命名空间名 access --rm -ti --image busybox /bin/sh

–rm:临时的
busybox:里面有很多测试的工具的一个镜像

通过 busybox 的 Pod 去访问 Nginx 服务
[root@master ~]# kubectl run --namespace=policy-demo access --rm -ti --image busybox /bin/sh

访问nginx服务的
wget -q nginx -O -

在这里插入图片描述显示nginx能在集群内访问了

注意:这里我们一旦exit退出这个环境后这个环境也就不存在了,因为时临时的,所以后续测试时可继续创建用来测试

在policy-demo命名空间中打开隔离,该策略将对policy-demo名称空间中的所有Pod实现默认的拒绝行为
在这里插入图片描述kind: 类型
apiVersion: api版本
metadata: 元数据信息
name: 默认拒绝
namespace:: 命名空间名字
spec: 规格
podSelector: pod选择器
matchLabels: {} 括号里面什么都没写表示所有的都拒绝

在这里插入图片描述写完策略后在访问policy-demo名称空间中的nginx服务就timed out(超时了)

现在,使用NetworkPolicy启用对nginx服务的访问。这将允许从accessPod 传入的连接,但不能从其他任何地方传入

首先要先查看一下nginx匹配的标签
命令格式:
kubectl get pod -n 命名空间名 --show-labels
在这里插入图片描述

在这里插入图片描述
matchLabels:匹配标签,我们前面查看到nginx匹配的标签时run
access-nginx:允许访问nginx
spec:规格
ingress:进入

在这里插入图片描述在所属命名空间内又可以访问nginx了

删除命名空间
kubectl delete ns policy-demo

如果想删除其他的直接
kubectl delete 其他

Calico 网络策略进阶

创建新的命名空间 advanced-policy-demo
kubectl create ns advanced-policy-demo

使用yaml文件创建nginx,注意修改yaml文件里的namespace
首先上传yaml文件到服务器中
然后编辑yaml文件
在这里插入图片描述
kubectl apply -f nginx-deployment.yaml

通过服务暴露 Nginx 的 80 端口
kubectl expose --namespace=advanced-policy-demo deployment nginx --port=80

验证访问权限并访问百度测试外网连通性
wget -q --timeout=5 nginx -O -
wget -q --timeout=5 www.baidu.com -O -

验证结果是都可以访问到

拒绝所有入口流量
在这里插入图片描述
kubectl run --namespace=advanced-policy-demo access --rm -ti --image busybox /bin/sh

wget -q --timeout=5 nginx -O -
wget -q --timeout=5 www.baidu.com -O -

验证结果是不能访问nginx了,但可以正常访问baidu

允许进入 Nginx 的流量
执行以下命令,创建一个 NetworkPolicy,设置允许流量从 advanced-policy-demo 命 名空间中的任何 Pod 到 Nginx Pod。创建策略成功后,就可以访问 Nginx 服务了

在这里插入图片描述
kubectl run --namespace=advanced-policy-demo access --rm -ti --image busybox /bin/sh

wget -q --timeout=5 nginx -O -
wget -q --timeout=5 www.baidu.com -O -

验证结果是都可以访问到

拒绝所有出口流量
设置拒绝所有出口流量的网络策略,该策略设置成功后,任何策略未明确允许的入站或出站流量都将被拒绝

在这里插入图片描述
wget -q --timeout=5 nginx -O -
wget -q --timeout=5 www.baidu.com -O -

验证结果是都不能访问了

允许 DNS 出口流量
在 kube-system 名称空间上创建一个标签。该标签的 NetworkPolicy 允许 DNS 从 advanced-policy-demo 名称空间中的任何 Pod 到名称空间 kube-system 的出 站流量

kubectl label namespace kube-system name=kube-system
在这里插入图片描述
在这里插入图片描述
使用nslookup可以看到nginx的服务ip和端口

即使 DNS 出口流量被允许,但来自 advanced-policy-demo 命名空间中所有 Pod 的所 有其他出口流量仍被阻止。因此,来自 wget 调用的 HTTP 出口流量仍将失败。

允许出口流量到 Nginx
创建一个 NetworkPolicy,允许从 advanced-policy-demo 名称空间中 的任何 Pod 到具有 app: nginx 相同名称空间中标签匹配的 Pod 的出站流量

在这里插入图片描述
kubectl run --namespace=advanced-policy-demo access --rm -ti --image busybox /bin/sh

wget -q --timeout=5 nginx -O -

验证结果可以访问到

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lxiaoyouyouj

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值