kubernetes - 阻止所有流量流向选定标签的网络策略
问题描述
在我们的集群中,我们在不同的节点池中运行两个版本的 API。现在我们每个版本的微服务流量从 pod1 > service1 > service2 > pod2 路由。我想使用网络策略来证明我们的 API 可以防止一个版本的 API 中的 Pod 与另一个版本通信。
下面是我为 1.1 版编写的网络策略示例。但是,这似乎阻碍了 1.1 节点池中的所有流量。
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: networkpolicy-v1-1
namespace: default
spec:
podSelector:
matchLabels:
version: v1-1
policyTypes:
- Ingress
- Egress
ingress:
- from:
- podSelector:
matchLabels:
version: v1-1
egress:
- {}
这是describe pod <podname>
显示标签匹配的输出。
Name: adduser-v1-1-696467d46-zkvq9
Namespace: default
Labels: app=adduser-v1-1
pod-template-hash=696467d46
version=v1-1
只是为了确认,我将以下语句添加到上面 pod 中运行的代码中。我能够在没有网络策略的情况下看到日志记录语句。当策略处于活动状态时,请求超时,并且找不到日志记录语句。
@api.route('/customer/add', methods=['POST'])
def create_customer():
logger.info("inside create customer")
值得一提的是,我们的服务是:
apiVersion: v1
kind: Service
metadata:
name: adduser-v1-1
spec:
ports:
- port: 80
targetPort: 8081
protocol: TCP
name: http
selector:
app: adduser-v1-1
type: LoadBalancer
编辑
澄清一下:在我上面的示例中, pod1 > service1 > service2 > pod2 所有 pod 和服务 1 和 2 都在同一个节点池中,并且 pod 1 和 2 都包含 label version=v1-1
。例子:
我希望这些 pod 能够相互交谈:
吊舱1
Labels: app=adduser-v1-1
pod-template-hash=687b4f6b8d
version=v1-1
豆荚2
Labels: app=authuser-v1-1
pod-template-hash=5449f9bd6d
version=v1-1
虽然这些 pod 应该被网络策略阻止
吊舱1
Labels: app=adduser-v1-1
pod-template-hash=687b4f6b8d
version=v1-1
吊舱 2
Labels: app=authuser-v2-0
pod-template-hash=bd87f9d55
version=v2-0
解决方案
上述网络策略 networkpolicy-v1-1 将只允许从 pod1(版本:v1-1)到 pod1(版本:v1-1)的入口流量,它不会允许任何其他入口流量,但允许所有传出流量,这是故意的吗?如果要实施 pod1 > service1 > service2 > pod2,那么下面的网络策略会有所帮助。下面将确保 pod2 只会接收来自 POD1 的流量
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: networkpolicy-v2-2
namespace: default
spec:
podSelector:
matchLabels:
version: v2-2
policyTypes:
- Ingress
- Egress
ingress:
- from:
- podSelector:
matchLabels:
version: v1-1
egress:
- {}
推荐阅读
- angularjs - ng-cloak 不适用于 Firefox 浏览器
- ruby - Ruby:使用 THOR 在终端提供值的简单计算器。错误:`add':未初始化的常量 MyCLI::Simplecal (NameError)
- c - 我写了一个程序来打印所有素数直到给定一个数字
- android - Android Studio 未检测到 Microsoft Android 模拟器
- html - 2 个 div - 相同高度不同宽度,固定和动态
- javascript - vue.js 中的热图
- android - 如何从 MainActivity 更改 RecyclerView 项目的颜色?
- sql - SQL“属于”逻辑
- android - Android Studio 编译应用但不再在手机上更新
- chef-infra - 厨师最终会为服务“启用”操作做什么?