首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
Kubernetes IP Masquerade Agent 用户指南
Kubernetes云管理控制器
Kubernetes安全地清空一个节点
Kubernetes保护集群
Kubernetes调试DNS问题
Kubernetes改变默认 StorageClass
Kubernetes更改PersistentVolume的回收策略
Kubernetes关键插件Pod的调度保证
Kubernetes静态加密Secret数据
Kubernetes开发云控制器管理器
Kubernetes控制节点上的CPU管理策略
Kubernetes控制节点上的拓扑管理策略
Kubernetes名字空间演练
Kubernetes配置API对象配额
启用/禁用 Kubernetes API
Kubernetes迁移多副本的控制面
Kubernetes升级集群
Kubernetes声明网络策略
Kubernetes使用CoreDNS进行服务发现
Kubernetes使用KMS驱动进行数据加密
使用Kubernetes API访问集群
Kubernetes使用NUMA感知的内存管理器
Kubernetes通过名字空间共享集群
Kubernetes通过配置文件设置Kubelet参数
为Kubernetes运行etcd集群
Kubernetes为节点发布扩展资源
Kubernetes限制存储使用量
Kubernetes验证已签名容器镜像
以非root用户身份运行Kubernetes节点组件
在Kubernetes集群中使用NodeLocal DNSCache
在Kubernetes集群中使用sysctl
Kubernetes在集群中使用级联删除
在运行中的集群上重新配置节点的 kubelet
Kubernetes自定义DNS服务
Kubernetes自动扩缩集群DNS服务
当前位置:
首页>>
技术小册>>
Kubernetes中文教程(五)
小册名称:Kubernetes中文教程(五)
本文可以帮助你开始使用 Kubernetes 的 [NetworkPolicy API] 声明网络策略去管理 Pod 之间的通信 你首先需要有一个支持网络策略的 Kubernetes 集群。已经有许多支持 NetworkPolicy 的网络提供商,包括: * [Antrea] * [Calico] * [Cilium] * [Kube-router] * [Romana] * [Weave 网络] ## 创建一个`nginx` Deployment 并且通过服务将其暴露 为了查看 Kubernetes 网络策略是怎样工作的,可以从创建一个`nginx` Deployment 并且通过服务将其暴露开始 ```shell kubectl create deployment nginx --image=nginx ``` ```none deployment.apps/nginx created ``` 将此 Deployment 以名为 `nginx` 的 Service 暴露出来: ```shell kubectl expose deployment nginx --port=80 ``` ```none service/nginx exposed ``` 上述命令创建了一个带有一个 nginx 的 Deployment,并将之通过名为 `nginx` 的 Service 暴露出来。名为 `nginx` 的 Pod 和 Deployment 都位于 `default` 名字空间内。 ```shell kubectl get svc,pod ``` ```none NAME CLUSTER-IP EXTERNAL-IP PORT AGE service/kubernetes 10.100.0.1 <none> 443/TCP 46m service/nginx 10.100.0.16 <none> 80/TCP 33s NAME READY STATUS RESTARTS AGE pod/nginx-701339712-e0qfq 1/1 Running 0 35s ``` ## 通过从 Pod 访问服务对其进行测试 你应该可以从其它的 Pod 访问这个新的 `nginx` 服务。 要从 default 命名空间中的其它 Pod 来访问该服务。可以启动一个 busybox 容器: ```shell kubectl run busybox --rm -ti --image=busybox:1.28 -- /bin/sh ``` 在你的 Shell 中,运行下面的命令: ```shell wget --spider --timeout=1 nginx ``` ```none Connecting to nginx remote file exists ``` ## 限制 `nginx` 服务的访问 如果想限制对 `nginx` 服务的访问,只让那些拥有标签 `access: true` 的 Pod 访问它, 那么可以创建一个如下所示的 NetworkPolicy 对象: NetworkPolicy 对象的名称必须是一个合法的 [DNS 子域名]. NetworkPolicy 中包含选择策略所适用的 Pods 集合的 `podSelector`。 你可以看到上面的策略选择的是带有标签 `app=nginx` 的 Pods。 此标签是被自动添加到 `nginx` Deployment 中的 Pod 上的。 如果 `podSelector` 为空,则意味着选择的是名字空间中的所有 Pods。 ## 为服务指定策略 使用 kubectl 根据上面的 `nginx-policy.yaml` 文件创建一个 NetworkPolicy: ```shell kubectl apply -f https://k8s.io/examples/service/networking/nginx-policy.yaml ``` ```none networkpolicy.networking.k8s.io/access-nginx created ``` ## 测试没有定义访问标签时访问服务 如果你尝试从没有设定正确标签的 Pod 中去访问 `nginx` 服务,请求将会超时: ```shell kubectl run busybox --rm -ti --image=busybox:1.28 -- /bin/sh ``` 在 Shell 中运行命令: ```shell wget --spider --timeout=1 nginx ``` ```none Connecting to nginx wget: download timed out ``` ## 定义访问标签后再次测试 创建一个拥有正确标签的 Pod,你将看到请求是被允许的: ```shell kubectl run busybox --rm -ti --labels="access=true" --image=busybox:1.28 -- /bin/sh ``` 在 Shell 中运行命令: ```shell wget --spider --timeout=1 nginx ``` ```none Connecting to nginx remote file exists ```
上一篇:
Kubernetes升级集群
下一篇:
Kubernetes使用CoreDNS进行服务发现
该分类下的相关小册推荐:
Kubernets合辑7-存储
Kubernets合辑12-配置中心
Kubernetes中文教程(二)
Kubernets合辑5-Pod控制器
Kubernetes中文教程(四)
Kubernets合辑4-kubernetes入门
云原生-K8S入门实战
Kubernetes中文教程(三)
Kubernets合辑14-日志收集
Kubernets合辑2-部署Ingress
Kubernets合辑6-服务发现
Kubernets合辑15-持续部署