如何使用网络策略(Network Policy)? -问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

如何使用网络策略(Network Policy)?

2020-03-31 15:33:21 688 1

如何使用网络策略(Network Policy)?

取消 提交回答
全部回答(1)
  • 小天使爱美
    2020-03-31 15:36:45

    本文介绍如何使用阿里云容器服务Kubernetes集群的网络策略(Network Policy)。

    前提条件 您已经成功创建一个 Kubernetes 集群,参见创建 Kubernetes 集群。 您在创建集群时,网络插件选择Terway,参见创建 Kubernetes 集群。 您可以通过Kubectl连接到Kubernetes 集群,参见通过 kubectl 连接 Kubernetes 集群。 测试nginx服务可以被其他pod正常访问 执行以下命令,创建一个nginx的应用,并通过名称为ngnix的Service将其暴露。 $ kubectl run nginx --image=nginx deployment.apps/nginx created $ kubectl get pod NAME READY STATUS RESTARTS AGE nginx-64f497f8fd-z**** 1/1 Running 0 45s

    $ kubectl expose deployment nginx --port=80 service/nginx exposed $ kubectl get service NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 172.XX.XX.1 443/TCP 3h nginx ClusterIP 172.XX.XX.48 80/TCP 10s 执行以下命令,创建名称为busybox的Pod,访问步骤1创建的nginx服务。 $ kubectl run busybox --rm -ti --image=busybox /bin/sh kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectl create instead. If you don't see a command prompt, try pressing enter. / # wget nginx Connecting to nginx (172.XX.XX.48:80) index.html 100% |***************************************************************************************************| 612 0:00:00 ETA / # 通过Network Policy限制服务只能被带有特定label的应用访问 执行以下命令,创建policy.yaml文件。 $ vim policy.yaml kind: NetworkPolicy apiVersion: networking.k8s.io/v1 metadata: name: access-nginx spec: podSelector: matchLabels: run: nginx ingress: - from: - podSelector: matchLabels: access: "true" 执行以下命令,根据步骤1的policy.yaml文件创建Network Policy。 $ kubectl apply -f policy.yaml networkpolicy.networking.k8s.io/access-nginx created 执行以下命令,当没有定义访问标签时,测试访问nginx服务,请求会超时,无法访问。 $ kubectl run busybox --rm -ti --image=busybox /bin/sh If you don't see a command prompt, try pressing enter. / # wget nginx Connecting to nginx (172.19.8.48:80) wget: can't connect to remote host (172.19.8.48): Connection timed out / # 执行以下命令,定义访问标签,测试访问nginx服务,请求成功,正常访问。 $ kubectl run busybox --rm -ti --labels="access=true" --image=busybox /bin/sh If you don't see a command prompt, try pressing enter. / # wget nginx Connecting to nginx (172.19.8.48:80) index.html 100% |***************************************************************************************************| 612 0:00:00 ETA / # 通过Network Policy限制能够访问暴露了公网SLB服务的来源IP段 执行以下命令,为上述nginx应用创建阿里云负载均衡服务,指定 type=LoadBalancer 来向外网用户暴露 nginx 服务。 $ vim nginx-service.yaml apiVersion: v1 kind: Service metadata: labels: run: nginx name: nginx-slb spec: externalTrafficPolicy: Local ports: - port: 80 protocol: TCP targetPort: 80 selector: run: nginx type: LoadBalancer

    $ kubectl apply -f nginx-service.yaml service/nginx-slb created

    $ kubectl get service nginx-slb NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nginx-slb LoadBalancer 172.19.12.254 47.110.200.119 80:32240/TCP 8m 执行以下命令,访问刚刚创建的SLB的IP地址47.110.XX.XX,访问失败。 $ wget 47.110.XX.XX --2018-11-21 11:46:05-- http://47.110.200.119/ Connecting to 47.110.XX.XX:80... failed: Connection refused. 说明 访问失败的原因是: 我们刚刚配置了nginx服务只能被带有特定label即access=true的应用访问。 访问SLB的IP地址,是从外部访问Kubernetes,与通过Network Policy限制服务只能被带有特定label的应用访问不同。 解决方法:修改Network Policy,增加允许访问的来源IP地址段。

    执行以下命令,查看本地的IP地址。 $ curl myip.ipip.net

    当前 IP:10.0.0.1 来自于:中国 北京 北京 #此处仅为示例,具体请以实际设备为准 执行以下命令,修改已经创建的policy.yaml文件。 $ vim policy.yaml kind: NetworkPolicy apiVersion: networking.k8s.io/v1 metadata: name: access-nginx spec: podSelector: matchLabels: run: nginx ingress: - from: - podSelector: matchLabels: access: "true" - ipBlock: cidr: 100.64.0.0/10 - ipBlock: cidr: 10.0.0.1/24 #本地IP地址,此处仅为示例,具体请以实际设备为准

    $ kubectl apply -f policy.yaml networkpolicy.networking.k8s.io/access-nginx unchanged 说明 有些网络的出口有多个IP地址,这里请使用/24的地址范围。 SLB健康检查地址在100.64.0.0/10地址段内,因此请务必配置100.64.0.0/10。 执行以下命令,测试访问nginx服务,访问成功。 $ kubectl run busybox --rm -ti --labels="access=true" --image=busybox /bin/sh

    If you don't see a command prompt, try pressing enter. / # wget 47.110.XX.XX Connecting to 47.110.XX.XX (47.110.XX.XX:80) index.html 100% |******************************************************| 612 0:00:00 ETA / # 通过Network Policy限制一个Pod只能访问www.aliyun.com 执行以下命令,获取www.aliyun.com域名解析到的IP地址列表。 $ dig +short www.aliyun.com www-jp-de-intl-adns.aliyun.com. www-jp-de-intl-adns.aliyun.com.gds.alibabadns.com. v6wagbridge.aliyun.com. v6wagbridge.aliyun.com.gds.alibabadns.com. 106.XX.XX.21 140.XX.XX.4 140.XX.XX.13 140.XX.XX.3 执行以下命令,创建busybox-policy文件。 $ vim busybox-policy.yaml kind: NetworkPolicy apiVersion: networking.k8s.io/v1 metadata: name: busybox-policy spec: podSelector: matchLabels: run: busybox egress: - to: - ipBlock: cidr: 106.XX.XX.21/32 - ipBlock: cidr: 140.XX.XX.4/32 - ipBlock: cidr: 140.XX.XX.13/32 - ipBlock: cidr: 140.XX.XX.3/32 - to: - ipBlock: cidr: 0.0.0.0/0 ports: - protocol: UDP port: 53 说明 在busybox-policy文件中,配置了Egress,即出网规则,限制应用的对外访问。在这里需配置允许UDP请求,否则无法做DNS解析。 执行以下命令,根据busybox-policy文件创建Network Policy。 $ kubectl apply -f busybox-policy.yaml networkpolicy.networking.k8s.io/busybox-policy created 执行以下命令,访问www.aliyun.com之外的网站,例如:www.google.com,访问失败。 $ kubectl run busybox --rm -ti --image=busybox /bin/sh If you don't see a command prompt, try pressing enter. / # wget www.google.com Connecting to www.google.com (64.13.XX.XX:80) wget: can't connect to remote host (64.13.XX.XX): Connection timed out 执行以下命令,访问www.aliyun.com,访问成功。 / # wget www.aliyun.com Connecting to www.aliyun.com (140.205.XX.XX:80) Connecting to www.aliyun.com (140.205.XX.XX:443) wget: note: TLS certificate validation not implemented index.html 100% |******************************************************| 462k 0:00:00 ETA / #

    0 0
相关问答

1

回答

怎么调用URL网络上的jar包呢?

2022-04-03 20:39:28 372浏览量 回答数 1

1

回答

DataWork中数据质量与智能监控一起使用时需要注意什么问题?

2021-12-12 11:04:50 590浏览量 回答数 1

1

回答

NetworkPolicy是干什么用的?

2021-11-29 16:35:02 119浏览量 回答数 1

1

回答

Flink JDBC Driver是否支持创建流数据表

2021-12-02 16:44:22 404浏览量 回答数 1

1

回答

Jupyter中R包中的fancyRpartPlot(my_tree)表示什么?

2021-12-02 13:39:58 230浏览量 回答数 1

1

回答

请问SQL JOIN 连接如何使用?

2021-10-02 16:24:43 620浏览量 回答数 1

1

回答

playFrameWork的数据库在applicaiton 配置 403.10 禁止访问:配置无效 

2020-05-27 20:03:04 349浏览量 回答数 1

1

回答

flink中如何在动态加载jar包#flink

2020-05-13 10:14:32 2619浏览量 回答数 1

1

回答

如何创建和使用SCC集群?

2020-03-23 19:30:15 883浏览量 回答数 1

1

回答

通过alipay.trade.precreate接口创建的二维码如何手动让其失效

2019-09-15 16:02:57 601浏览量 回答数 1
0
文章
3151
问答
问答排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载