【云原生、k8s】Calico网络策略

这篇具有很好参考价值的文章主要介绍了【云原生、k8s】Calico网络策略。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

第四阶段

时  间:2023年8月17日

参加人:全班人员

内  容:

Calico网络策略

目录

一、前提配置

二、Calico网络策略基础

1、创建服务

2、启用网络隔离

3、测试网络隔离

4、允许通过网络策略进行访问

三、Calico网络策略进阶

1、创建服务

2、拒绝所有入口流量

3、允许进入Nginx的流量

4、拒绝所有出口流量

5、允许DNS出口流量

6、允许出口流量到Nginx


一、前提配置

1、主机初始化设置

[root@k8s-master ~]# iptables -F

[root@k8s-master ~]# setenforce 0

[root@k8s-master ~]# systemctl stop firewalld

[root@k8s-master ~]# free

[root@k8s-master ~]# sysctl -p

【云原生、k8s】Calico网络策略,kubernetes,云原生,网络

 

2、安装部署k8s集群,并使用calico网络

[root@k8s-master ~]# kubectl get nodes

[root@k8s-master ~]# kubectl get pods -n kube-system

【云原生、k8s】Calico网络策略,kubernetes,云原生,网络

 

二、Calico网络策略基础

1、创建服务

1)创建命名空间

[root@k8s-master ~]# kubectl create ns policy-demo

【云原生、k8s】Calico网络策略,kubernetes,云原生,网络

 

2)在 policy-demo 命名空间中创建两个副本的 Nginx Pod。

[root@k8s-master ~]# vim nginx-deployment.yaml

【云原生、k8s】Calico网络策略,kubernetes,云原生,网络

[root@k8s-master ~]# kubectl apply -f nginx-deployment.yaml

[root@k8s-master ~]# kubectl get pod -n policy-demo

【云原生、k8s】Calico网络策略,kubernetes,云原生,网络

 

3)通过服务暴露 Nginx 的 80 端口。

[root@k8s-master ~]# kubectl expose --namespace=policy-demo deployment nginx --port=80

[root@k8s-master ~]# kubectl get all -n policy-demo

【云原生、k8s】Calico网络策略,kubernetes,云原生,网络

 

4)通过 busybox 的 Pod 去访问 Nginx 服务。

[root@k8s-master ~]# kubectl run --namespace=policy-demo access --rm -ti --image busybox /bin/sh

/ # wget -q nginx -O -

【云原生、k8s】Calico网络策略,kubernetes,云原生,网络

[root@k8s-master ~]# kubectl get all -n policy-demo

【云原生、k8s】Calico网络策略,kubernetes,云原生,网络

2、启用网络隔离

        在 policy-demo 命名空间中打开隔离。然后 Calico 将阻止连接到该命名空间中的 Pod。执行以下命令将创建一个 NetworkPolicy,该策略将对 policy-demo 名称空间中的所有 Pod实现默认的拒绝行为。

[root@k8s-master ~]# kubectl create -f - <<EOF

kind: NetworkPolicy

apiVersion: networking.k8s.io/v1

metadata:

  name: default-deny

  namespace: policy-demo

spec:

  podSelector:

    matchLabels: {}

EOF

【云原生、k8s】Calico网络策略,kubernetes,云原生,网络

 

3、测试网络隔离

启用网络隔离后,所有对 Nginx 服务的访问都将阻止。执行以下命令,尝试再次访问Nginx 服务,查看网络隔离的效果。

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

【云原生、k8s】Calico网络策略,kubernetes,云原生,网络

 

4、允许通过网络策略进行访问

        使用 NetworkPolicy 启用对 Nginx 服务的访问。设置允许从 accessPod 传入的连接,但不能从其他任何地方传入。创建 access-nginx 的网络策略具体内容如下所示。

[root@k8s-master ~]# kubectl create -f - <<EOF

kind: NetworkPolicy

apiVersion: networking.k8s.io/v1

metadata:

  name: access-nginx

  namespace: policy-demo

spec:

  podSelector:

    matchLabels:

      app: nginx

  ingress:

    - from:

      - podSelector:

          matchLabels:

            run: access

EOF

【云原生、k8s】Calico网络策略,kubernetes,云原生,网络

 

从 accessPod 访问该服务。

[root@k8s-master ~]# kubectl run --namespace=policy-demo access --rm -ti --image busybox /bin/sh

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

【云原生、k8s】Calico网络策略,kubernetes,云原生,网络

 

如果没有标记access,仍然无法访问服务。

[root@k8s-master ~]# kubectl run --namespace=policy-demo cant-access --rm -ti --image busybox /bin/sh

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

【云原生、k8s】Calico网络策略,kubernetes,云原生,网络

[root@k8s-master ~]# kubectl get all -n policy-demo

【云原生、k8s】Calico网络策略,kubernetes,云原生,网络

三、Calico网络策略进阶

1、创建服务

删除命令空间 policy-demo,创建新的命名空间 advanced-policy-demo。

[root@k8s-master ~]# kubectl delete ns policy-demo

[root@k8s-master ~]# kubectl create ns advanced-policy-demo

【云原生、k8s】Calico网络策略,kubernetes,云原生,网络

 

使用 YAML 文件创建 Nginx 服务。

[root@k8s-master ~]# vim nginx-deployment.yaml

【云原生、k8s】Calico网络策略,kubernetes,云原生,网络

[root@k8s-master ~]# kubectl apply -f nginx-deployment.yaml

[root@k8s-master ~]# kubectl expose --namespace=advanced-policy-demo deployment nginx --port=80

[root@k8s-master ~]# kubectl get all -n advanced-policy-demo

【云原生、k8s】Calico网络策略,kubernetes,云原生,网络

 

验证访问权限并访问百度测试外网连通性。

[root@k8s-master ~]# kubectl run --namespace=advanced-policy-demo access --rm -ti --image busybox /bin/sh

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

【云原生、k8s】Calico网络策略,kubernetes,云原生,网络

/ # wget -q --timeout=5 www.baidu.com -O -

【云原生、k8s】Calico网络策略,kubernetes,云原生,网络

[root@k8s-master ~]# kubectl get all -n advanced-policy-demo

【云原生、k8s】Calico网络策略,kubernetes,云原生,网络

2、拒绝所有入口流量

设置网络策略,要求 Nginx 服务拒绝所有入口流量。然后进行访问权限的验证。

[root@k8s-master ~]# kubectl create -f - <<EOF

apiVersion: networking.k8s.io/v1

kind: NetworkPolicy

metadata:

  name: default-deny-ingress

  namespace: advanced-policy-demo

spec:

  podSelector:

    matchLabels: {}

  policyTypes:

  - Ingress

EOF

【云原生、k8s】Calico网络策略,kubernetes,云原生,网络

[root@k8s-master ~]# kub        w.baidu.com -O -

【云原生、k8s】Calico网络策略,kubernetes,云原生,网络

        从上述命令执行结果中可以看出,对 Nginx 服务的入口访问被拒绝,而仍然允许对出站 Internet 的出口访问。

3、允许进入Nginx的流量

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

[root@k8s-master ~]# kubectl create -f - <<EOF

apiVersion: networking.k8s.io/v1

kind: NetworkPolicy

metadata:

  name: access-nginx

  namespace: advanced-policy-demo

spec:

  podSelector:

    matchLabels:

      app: nginx

  ingress:

    - from:

      - podSelector:

          matchLabels: {}

EOF

【云原生、k8s】Calico网络策略,kubernetes,云原生,网络

[root@k8s-master ~]# 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 -

【云原生、k8s】Calico网络策略,kubernetes,云原生,网络

 

4、拒绝所有出口流量

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

[root@k8s-master ~]# kubectl create -f - <<EOF

apiVersion: networking.k8s.io/v1

kind: NetworkPolicy

metadata:

  name: default-deny-egress

  namespace: advanced-policy-demo

spec:

  podSelector:

    matchLabels: {}

  policyTypes:

  - Egress

EOF

【云原生、k8s】Calico网络策略,kubernetes,云原生,网络

[root@k8s-master ~]# kubectl run --namespace=advanced-policy-demo access --rm -ti --image busybox /bin/sh

/ # nslookup nginx

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

/ # wget -q --timeout=5 www.baidu.com -O -

【云原生、k8s】Calico网络策略,kubernetes,云原生,网络

 

5、允许DNS出口流量

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

[root@k8s-master ~]# kubectl label namespace kube-system name=kube-system

【云原生、k8s】Calico网络策略,kubernetes,云原生,网络

[root@k8s-master ~]# kubectl create -f - <<EOF

apiVersion: networking.k8s.io/v1

kind: NetworkPolicy

metadata:

  name: allow-dns-access

  namespace: advanced-policy-demo

spec:

  podSelector:

    matchLabels: {}

  policyTypes:

  - Egress

  egress:

  - to:

    - namespaceSelector:

        matchLabels:

          name: kube-system

    ports:

    - protocol: UDP

      port: 53

EOF

【云原生、k8s】Calico网络策略,kubernetes,云原生,网络

[root@k8s-master ~]# kubectl run --namespace=advanced-policy-demo access --rm -ti --image busybox /bin/sh

/ # nslookup nginx

/ # nslookup www.baidu.com

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

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

【云原生、k8s】Calico网络策略,kubernetes,云原生,网络

 

6、允许出口流量到Nginx

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

[root@k8s-master ~]# kubectl create -f - <<EOF

apiVersion: networking.k8s.io/v1

kind: NetworkPolicy

metadata:

  name: allow-egress-to-advance-policy-ns

  namespace: advanced-policy-demo

spec:

  podSelector:

    matchLabels: {}

  policyTypes:

  - Egress

  egress:

  - to:

    - podSelector:

        matchLabels:

          app: nginx

EOF

【云原生、k8s】Calico网络策略,kubernetes,云原生,网络

[root@k8s-master ~]# 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 -

【云原生、k8s】Calico网络策略,kubernetes,云原生,网络

 

        访问百度超时,是因为它可以解决 DNS 匹配标签以外的其他任何出口访问 app: nginx的 advanced-policy-demo 命名空间。文章来源地址https://www.toymoban.com/news/detail-662017.html

到了这里,关于【云原生、k8s】Calico网络策略的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [Kubernetes[K8S]集群:master主节点初始化]:通过Calico和Coredns网络插件方式安装

    主节点:安装coredns - init初始化 主节点(此时还没有安装calico) 从节点:基于主节点生成join命令加入集群 主节点:安装calico:apply 生成pod,此时没有调整yaml网卡 coredns 和calico pod 运行成功 但是 calico-node-cl8f2 运行失败 查看 解决链接 因为之前写过一篇,calico一直异常,步骤

    2024年04月15日
    浏览(53)
  • 【云原生-K8s】kubeadm搭建安装k8s集群v1.25版本完整教程【docker、网络插件calico、中间层cri-docker】

    从 k8s 1.24开始,dockershim已经从kubelet中移除,但因为历史问题docker却不支持kubernetes主推的CRI(容器运行时接口)标准,所以docker不能再作为k8s的容器运行时了,即从k8s v1.24开始不再使用docker了 但是如果想继续使用docker的话,可以在kubelet和docker之间加上一个中间层cri-docker。

    2024年02月03日
    浏览(44)
  • Kubernetes(k8s)网络策略NetworkPolicy

    目录 一.系统环境 二.前言 三.网络策略(NetworkPolicy)简介 四.创建pod和svc 五.没有网络策略的条件下访问pod 六.给pod添加网络策略 6.1 入站网络策略 6.1.1 入站网络策略-pod标签选择器 6.1.2 入站网络策略-namespaceSelector命名空间选择器 6.1.3 入站网络策略-IP地址控制 6.2 出站网络策略

    2024年02月08日
    浏览(39)
  • 【云原生 • Kubernetes】认识 k8s 网络、外部网络访问 k8s 内部服务

    目录 一、认识 Kubernetes 网络 二、外部网络如何访问 k8s 内部服务 1. NodePort 2. Load Balancer 3. Ingress Kubernetes 最底层的网络为节点网络,用来保证 k8s 集群的节点(master 和 worker、worker 节点之间)能够做正常的 IP 寻址和通讯。 Kubernetes 第二层网络就是 Pod 网络,构建于节点网络之上

    2024年01月16日
    浏览(71)
  • 【云原生】k8s NetworkPolicy 网络策略是怎么样的

    随着微服务的流行,越来越多的云服务平台需要大量模块之间的网络调用。 在 Kubernetes 中,网络策略(NetworkPolicy)是一种强大的机制,可以控制 Pod 之间和 Pod 与外部网络之间的流量。 Kubernetes 中的 NetworkPolicy 定义了一组规则,这些规则允许或者拒绝特定流量的传输。通过使用

    2024年02月02日
    浏览(32)
  • 【K8S系列】深入解析k8s网络插件—Calico

    做一件事并不难,难的是在于坚持。坚持一下也不难,难的是坚持到底。 文章标记颜色说明: 黄色 :重要标题 红色 :用来标记结论 绿色 :用来标记论点 蓝色 :用来标记论点 Kubernetes (k8s) 是一个容器编排平台,允许在容器中运行应用程序和服务。今天学习一下k8s网络插件

    2024年02月16日
    浏览(45)
  • k8s calico 网络异常处理

    故障 worker3故障重启后,该节点的 pod 访问不了其它节点服务 2023-06-26T07:44:41.041Z        ERROR   setup   unable to start manager {\\\"error\\\": \\\"Get \\\"https://10.244.64.1:443/api?timeout=32s\\\": dial tcp 10.244.64.1:443: i/o timeout\\\"} 发现网络组件也是有报错重启,对比其它节点的iptables,少了好多。     该节点

    2024年02月11日
    浏览(48)
  • K8s 安装Calico网络插件

    Flannel网络插件公认为是最简单的一个插件了,它是一个overlay网络,相对性能和灵活性方面,比Calico要差一些。此外,Calico还可以与服务网格Istio集成,以便在服务网格层和网络基础架构层中解释和实施集群内工作负载的策略。今天我们就装一个Calico网络插件。 在《Centos7.9

    2024年02月11日
    浏览(45)
  • k8s 之网络组件-Calico(十九)

    下载资源 :安装 kubernetes 网络组件-Calico 一, 简介         Calico是Kubernetes生态系统中另一种流行的网络选择。虽然Flannel被公认为是最简单的选择,但Calico以其性能、灵活性而闻名。Calico的功能更为全面,不仅提供主机和pod之间的网络连接,还涉及网络安全和管理。Cali

    2024年02月11日
    浏览(39)
  • k8s Calico网络和flannel网络对比

    Calico 和 Flannel 是 Kubernetes(K8s) 中常用的两种网络插件,它们都有各自的优点和适用场景。以下是 Calico 网络与 Flannel 网络的一些主要对比点: Calico 1. 技术基础 :Calico 依赖于 BGP(Border Gateway Protocol)路由协议来实现节点间通信,可以支持大规模的集群。 2. 性能 :由于使用

    2024年04月27日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包