网络基本管理

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 网络基本管理

目录

calico基本管理

1. ippool

[root@master ~]# kubectl get ippool
NAME                  CREATED AT
default-ipv4-ippool   2024-01-07T05:14:31Z

导出这个ippool的yaml文件

[root@master ~]# kubectl get ippools/default-ipv4-ippool -o yaml
apiVersion: projectcalico.org/v3
kind: IPPool
metadata:
  creationTimestamp: "2024-01-07T05:14:31Z"
  name: default-ipv4-ippool
  resourceVersion: "3096"
  uid: f0951e80-722d-4c49-8aac-2254baea12a9
spec:
  allowedUses:
  - Workload
  - Tunnel
  blockSize: 26              
  cidr: 10.244.0.0/16
  ipipMode: Never
  natOutgoing: true
  nodeSelector: all()
  vxlanMode: CrossSubnet
  • blockSize: 26 分配给每个节点的子网
  • cidr: 10.244.0.0/16 当前池的podcidr
  • ipipMode: Never 是否使用ipip模式
  • ipipMode和vxlanMode都有3个模式可选
  1. Always:使用ipip模式
  2. CrossSubnet:BGP模式
  3. Never:不适用IPIP

1.1 创建一个池

apiVersion: projectcalico.org/v3
kind: IPPool
metadata:
name: mypool
spec:
allowedUses:
- Workload
- Tunnel
blockSize: 26
cidr: 10.200.0.0/24
ipipMode: Never
natOutgoing: true
nodeSelector: all()
vxlanMode: CrossSubnet
[root@master euler]# kubectl apply -f pool.yaml 
ippool.projectcalico.org/mypool created
[root@master euler]# 
[root@master euler]# kubectl get ippools.
NAME                  CREATED AT
default-ipv4-ippool   2024-01-07T05:14:31Z
mypool                2024-06-17T02:44:06Z

现在ippool已经被创建出来了

1.2 指定pod使用ippool

在k8s里面标签的作用是非常多的,我们可以指定唯一标识来让某个pod落在指定的ippool里面,早期也确实是这么用的,但是这样操作的话,标签会变得越来越多,不方便查看。还有没有其他方式可以像标签一样唯一标识一个资源呢?有,annotations(注释)就可以,所以需要指定pod落在哪个池的话需要给他加上一个注释

1.2.1 生成一个pod模板

[root@master euler]# kubectl run web01 --image nginx --image-pull-policy IfNotPresent --dry-run=client -o yaml > select_pool.yaml

1.2.2 修改pod模板

[root@master euler]# vim select_pool.yaml
apiVersion: v1
kind: Pod
metadata:
# 需要加上这一段
  annotations:
    cni.projectcalico.org/ipv4pools: "[\"mypool\"]"
# 到这里结束
  creationTimestamp: null
  labels:
    run: web01
  name: web01
spec:
  containers:
  - image: nginx
    imagePullPolicy: IfNotPresent
    name: web01
    resources: {}
  dnsPolicy: ClusterFirst
  restartPolicy: Always
status: {}

1.2.3 验证pod的ip

[root@master euler]# kubectl get pods/web01 -o wide
NAME    READY   STATUS    RESTARTS   AGE   IP             NODE    NOMINATED NODE   READINESS GATES
web01   1/1     Running   0          58s   10.200.0.128   node1   <none>           <none>

可以看到这个pod的IP他就是我们刚刚指定的pool里面的一个地址了

1.2.4 测试pod之间的连通性

[root@master euler]# kubectl exec -it pod01 -- bash
root@pod01:/# curl 10.200.0.128
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
…………省略部分信息

可以看到,他与其他池的pod的网络也是通的

1.3 指定固定ip

依然是使用刚刚的pod模板

[root@master euler]# cp select_pool.yaml ipadd.yaml
[root@master euler]# vim ipadd.yaml 
apiVersion: v1
kind: Pod
metadata:
  annotations:
    cni.projectcalico.org/ipv4pools: "[\"mypool\"]"
# 加上这一行
    cni.projectcalico.org/ipAddrs: "[\"10.200.0.100\"]"
  creationTimestamp: null
  labels:
    run: web01
  name: web01
spec:
  containers:
  - image: nginx
    imagePullPolicy: IfNotPresent
    name: web01
    resources: {}
  dnsPolicy: ClusterFirst
  restartPolicy: Always
status: {}
[root@master euler]# kubectl get pods/web01 -o wide
NAME    READY   STATUS    RESTARTS   AGE   IP             NODE    NOMINATED NODE   READINESS GATES
web01   1/1     Running   0          29s   10.200.0.100   node1   <none>           <none>

不过这个功能比较鸡肋,只能使用在pod上,因为使用在deployment上有10个副本,你如何去给我指定10个一样的地址呢?对吧

2. 定义网络策略

这是从官网抄的yaml

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: test-network-policy
namespace: default
# 定义具体策略
spec:
# 选取目标
podSelector:
matchLabels:
role: db
# 定义策略
policyTypes:
- Ingress
- Egress
# 具体策略
ingress:
- from:
- ipBlock:
cidr: 172.17.0.0/16
except:
- 172.17.1.0/24
- namespaceSelector:
matchLabels:
project: myproject
- podSelector:
matchLabels:
role: frontend
ports:
- protocol: TCP
port: 6379
egress:
- to:
- ipBlock:
cidr: 10.0.0.0/24
ports:
- protocol: TCP
port: 5978

网络策略是命名空间级别的资源,只能用于管理某个命名空间下的pod

上面的示例中选择的pod是标签为role: db,如果需要选取有,那么podSelector:{}这样写就是选取所有

具体的策略有ingress和egress,分别对应入站策略和出站策略,并且写了策略而没有写具体策略那么就是拒绝的策略

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: test-network-policy
namespace: default
# 定义具体策略
spec:
# 选取目标
podSelector:
matchLabels:
role: db
# 定义策略
policyTypes:
- Ingress
- Egress

如果直接这样写,是不会报错的,并且所有的流量都被拒绝掉,也就是说,规则都是针对于拒绝去写的,没有定义的都是允许,但是如果使用之前的那个yaml文件,他就会允许172.17.0.0/16这个网段,但是172.17.1.0/24这个网段也是不可以访问的,并且只允许访问tcp的6379端口

2.1 网络策略实验

只允许internal命名空间下的pod访问命名空间内部的80端口的pod

# 创建命名空间
[root@master euler]# kubectl create ns internal

2.1.1 定义网络策略

我们只允许访问80端口,并且是internal命名空间下,所以我们只用写ingress的策略,因为默认不写egress就是全部放行,并且不用写命名空间,因为这个策略就是在internal命名空间内的,

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: test-network-policy
  namespace: internal
spec:
  podSelector: {}
  policyTypes:
  - Ingress
  ingress:
  - from:
    - podSelector: {}
    ports:
    - protocol: TCP
      port: 80
    - protocol: UDP
      port: 80
[root@master euler]# kubectl apply -f mynetworkpolicy.yaml

2.1.2 创建pod测试

我们只放行了80端口,那我们可以开一个nginx和一个mysql来看差别,使用busybox来测试

[root@master euler]# kubectl run nginx --image nginx --image-pull-policy IfNotPresent 
[root@master euler]# kubectl run mysql --image mysql --image-pull-policy IfNotPresent --env "MYSQL_ROOT_PASSWORD=123"
[root@master euler]# kubectl run busybox --image busybox --image-pull-policy IfNotPresent -- sleep 3600
# 查看 pod ip
[root@master euler]# kubectl get pods -o wide
NAME      READY   STATUS    RESTARTS   AGE    IP              NODE    NOMINATED NODE   READINESS GATES
busybox   1/1     Running   0          101s   10.244.104.22   node2   <none>           <none>
mysql     1/1     Running   0          50s    10.200.0.67     node1   <none>           <none>
nginx     1/1     Running   0          118s   10.244.104.46   node2   <none>           <none>
# 进入busybox使用telnet测试
[root@master euler]# kubectl exec -it busybox -- sh
/ # 
/ # telnet 10.200.0.67 3306

使用telnet连接mysql的3306 端口会一直卡在这

尝试连接80端口

/ # telnet 10.244.104.46 80
Connected to 10.244.104.46
# 出现这个显示按一下 e
e
HTTP/1.1 400 Bad Request
Server: nginx/1.25.4
Date: Mon, 17 Jun 2024 05:20:37 GMT
Content-Type: text/html
Content-Length: 157
Connection: close
<html>
<head><title>400 Bad Request</title></head>
<body>
<center><h1>400 Bad Request</h1></center>
<hr><center>nginx/1.25.4</center>
</body>
</html>
Connection closed by foreign host

按完e之后他就会显示一个400的报错,这个是正常的,我们只是用telnet来测试端口

可以来个更加直观的测试

# 直接删除网络策略
[root@master euler]# kubectl delete -f mynetworkpolicy.yaml 
networkpolicy.networking.k8s.io "test-network-policy" deleted
# 再尝试连接
/ # telnet 10.200.0.67 3306
Connected to 10.200.0.67
I
8.2.0 %d9,Sÿ3a
                MS&R5P
                      caching_sha2_password

这个时候你会发现他并不会卡在那了,直接会有信息输出

本文来自博客园,作者:FuShudi,转载请注明原文链接:https://www.cnblogs.com/fsdstudy/p/18252197

分类: Euler / HCIE / k8s , Euler

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
8月前
|
安全 算法 网络安全
网络防御的三重奏:漏洞管理、加密技术与安全意识
【4月更文挑战第7天】在数字化时代,网络安全和信息安全已成为企业和个人不可忽视的战场。本文将深入探讨网络安全的核心问题——漏洞管理,介绍现代加密技术的进展,并强调提升安全意识的重要性。通过分析网络攻击的常见手段,我们揭示了有效管理漏洞的策略;同时,评估了从对称加密到非对称加密,再到量子加密的技术演进。最后,文章指出,在技术和工具不断进步的同时,用户的安全意识仍是防御体系中不可或缺的一环。
|
8月前
|
安全 Java Unix
网络IO管理
网络IO管理
77 0
|
6月前
|
监控 安全 网络安全
网络防线的构筑与维护:漏洞管理、加密技术与安全意识的协同进化
在数字时代的浪潮中,网络安全与信息安全的重要性愈发凸显。本文将探讨网络安全的薄弱环节—漏洞,并分析如何通过高效的漏洞管理来强化网络防御。同时,我们将深入了解加密技术的原理及其在保护数据安全中的应用。最后,文章强调了安全意识的核心地位,以及如何通过提升个人和组织的安全意识来构建更为坚固的网络安全防线。
|
8月前
|
网络安全 数据安全/隐私保护 网络协议
2024年广东省网络系统管理样题第4套网络搭建部分
2024年广东省网络系统管理样题第4套网络搭建部分
2024年广东省网络系统管理样题第4套网络搭建部分
|
8月前
|
网络安全 数据安全/隐私保护 网络虚拟化
2024年广东省网络系统管理样题第3套网络搭建部分
2024年广东省网络系统管理样题第3套网络搭建部分
2024年广东省网络系统管理样题第3套网络搭建部分
|
8月前
|
安全 数据安全/隐私保护 网络协议
【题目】【网络系统管理】2022 年全国职业院校技能大赛 网络系统管理赛项 模块 A:网络构建
【题目】【网络系统管理】2022 年全国职业院校技能大赛 网络系统管理赛项 模块 A:网络构建
【题目】【网络系统管理】2022 年全国职业院校技能大赛 网络系统管理赛项 模块 A:网络构建
|
6月前
|
安全 网络安全 区块链
网络防御新境界:漏洞管理、加密技术与安全意识的融合之道
在数字化浪潮中,网络安全成为保护企业资产和用户隐私的关键防线。本文深入探讨了网络安全漏洞的发现与管理、加密技术的最新进展以及提升个人和组织安全意识的重要性。通过分析近期的安全事件和技术发展,揭示了一个多层次、动态发展的网络防御体系的必要性。文章强调,只有将技术创新与人的要素相结合,才能构筑起真正坚固的网络安全防线。
58 0
|
8月前
|
网络安全 数据安全/隐私保护 网络虚拟化
2024年广东省网络系统管理样题第2套网络搭建部分
2024年广东省网络系统管理样题第2套网络搭建部分
2024年广东省网络系统管理样题第2套网络搭建部分
|
8月前
|
数据安全/隐私保护 网络虚拟化 网络协议
2024年广东省网络系统管理样题第1套网络搭建部分
2024年广东省网络系统管理样题第1套网络搭建部分
2024年广东省网络系统管理样题第1套网络搭建部分
|
8月前
|
网络协议 安全 数据安全/隐私保护
【题目】【网络系统管理】2022年甘肃省职业院校技能大赛-网络构建-试卷
【题目】【网络系统管理】2022年甘肃省职业院校技能大赛-网络构建-试卷
【题目】【网络系统管理】2022年甘肃省职业院校技能大赛-网络构建-试卷

热门文章

最新文章