kubernetes - 如何将 pod 出口流量限制为仅外部
问题描述
我需要将 pod 出口流量限制到外部目的地。Pod 应该能够访问 Internet 上的任何目的地,并且所有集群内部目的地都应该被拒绝。
这是我尝试过的,但没有通过验证:
apiVersion: networking.istio.io/v1beta1
kind: Sidecar
metadata:
name: test
spec:
workloadSelector:
labels:
k8s-app: mypod
outboundTrafficPolicy:
mode: REGISTRY_ONLY
egress:
- hosts:
- 'default/*'
apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
name: all-external
spec:
location: MESH_EXTERNAL
resolution: DNS
hosts:
- '*'
ports:
- name: http
protocol: HTTP
number: 80
- name: https
protocol: TLS
number: 443
Istio 1.11.4
解决方案
我是用NetworkPolicy
. 允许到 kubernetes 和 istio 相关服务的流量(不仅基于命名空间可能更严格):
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: myapp-eg-system
spec:
podSelector:
matchLabels:
app: myapp
policyTypes:
- Egress
egress:
- to:
- namespaceSelector:
matchLabels:
kubernetes.io/metadata.name: kube-system
- namespaceSelector:
matchLabels:
kubernetes.io/metadata.name: istio-system
允许除集群网络 IP 空间之外的任何内容:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: myapp-eg-app
spec:
podSelector:
matchLabels:
app: myapp
policyTypes:
- Egress
egress:
- to:
# Restrict to external traffic
- ipBlock:
cidr: '0.0.0.0/0'
except:
- '172.0.0.0/8'
- podSelector:
matchLabels:
app: myapp
ports:
- protocol: TCP
推荐阅读
- javascript - 如何防止角子组件的点击事件过早触发?
- c++ - makefile 正在跳过目标
- javascript - 雨果不让我列出某个部分的页面,拒绝争论?
- python - 将 PIL Image 传递给谷歌云视觉,无需保存和读取
- r - 从 caret 包中绘制平均交叉验证的 AUC
- c# - 具有 SQL Server 连接的实体框架 6 尝试使用 MySqlClient 并崩溃
- azure - Azure DevOps Repos TFVC 从一个组织转移到另一个具有完整历史记录
- python - 尝试使用 Beautiful Soup 访问 ['style'] 时出现 KeyError
- ruby-on-rails - 我关于生产的博客没有按照开发的方式工作
- python - Pyspark - 规范化数据框