为Azure DevOps代理配置Kubernetes网络策略
·
配置 Azure DevOps 代理的 Kubernetes 网络策略
在 Azure DevOps 中运行的自托管代理通常需要访问 Kubernetes 集群以执行构建、部署等任务。为确保安全,可以通过网络策略限制代理的访问权限。
确认 Azure DevOps 代理的 IP 或 Pod 标签
确保 Kubernetes 集群已启用网络策略支持(如 Calico、Cilium 或其他 CNI 插件)。识别 Azure DevOps 代理的以下信息:
- Pod 标签(如果代理运行在 Kubernetes 集群内)
- 外部 IP(如果代理运行在集群外)
示例 YAML 片段,用于代理 Pod 标签识别:
metadata:
labels:
app: azure-devops-agent
创建 NetworkPolicy 限制入口流量
允许特定代理访问 Kubernetes API 或特定服务。以下策略示例仅允许带有 app: azure-devops-agent 标签的 Pod 访问特定命名空间内服务:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-devops-agent
namespace: target-namespace
spec:
podSelector:
matchLabels: {} # 目标 Pod(空表示所有 Pod)
ingress:
- from:
- podSelector:
matchLabels:
app: azure-devops-agent
ports:
- protocol: TCP
port: 80
- protocol: TCP
port: 443
允许出口流量到关键服务
确保代理可以访问 Azure DevOps 服务和依赖的容器仓库(如 ACR、Docker Hub)。以下策略允许代理访问外部 HTTPS 服务:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-devops-agent-egress
spec:
podSelector:
matchLabels:
app: azure-devops-agent
egress:
- to:
- ipBlock:
cidr: 0.0.0.0/0
ports:
- protocol: TCP
port: 443
- protocol: TCP
port: 80
验证策略生效
使用 kubectl 检查策略状态并测试代理连接:
kubectl get networkpolicy -n target-namespace
kubectl describe networkpolicy allow-devops-agent -n target-namespace
在代理 Pod 内执行测试:
kubectl exec -it <agent-pod> -- curl -v http://<target-service>
高级策略:限制访问特定命名空间
若需进一步隔离,限制代理仅能访问特定命名空间:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: restrict-devops-agent-namespace
spec:
podSelector:
matchLabels:
app: azure-devops-agent
egress:
- to:
- namespaceSelector:
matchLabels:
kubernetes.io/metadata.name: allowed-namespace
通过以上步骤,可以确保 Azure DevOps 代理在 Kubernetes 环境中仅具备必要的网络访问权限,同时满足安全合规要求。
更多推荐
所有评论(0)