クリックし、ダウンロードに、文書この記事のすべてのリンクhttps://tungstenfabric.org.cn/assets/uploads/files/tf-ceg-case4.pdfを見ます
ほとんどの本番環境では、ネットワークアクセス制御を実装する必要があります。Kubernetesは、ポッドがNetworkPolicy通信リソースを使用して設定方法を説明するための方法を提供します。
そしてKubernetesは、ほとんどのもので、戦略はネットワークを機能させるために、あなたはプラグインKubernetes CNIそれらをサポートするために必要です。
利用シナリオ
ほとんどすべての環境では、コンポーネントはアプリケーションのための通信の明確なルールを確立する必要がある、それは良いアイデアです。Kubernetesネットワークポリシーの仕様は、直接一緒にアプリケーションマニフェストに統合NetworkPolicyにあなたを可能にする簡単な方法です。
あなたが正確にどのようなネットワークトラフィックを指定することができ、リソースを定義するNetworkPolicy方法が許可され、podSelectorを使用してKubernetes上で動作するアプリケーションの動的な性質を扱うために定義されている間、何が許可されていません。
あなたのポリシーは、安全な範囲ポッドの大きさに「ズームアウト」になる単一またはポッドポッドグループのためにできること。この意味。
明確に定義されたデフォルト・拒否設定と組み合わせたネットワークポリシーは、悪意のあるアプリケーションの侵入を防ぐため、および/または不正行為、または設定エラーがトラブルを起こしたことができます。例えば、アプリケーションは、成分保持DNSキャッシュエントリまたは誤ったコンフィギュレーションパラメータを有し、それがエラーの後端と通信させることができます。またはアプリケーションは、横方向に浸透し、またはちょうどあなたのコンピューティングリソースを盗むために、いくつかの暗号通貨ポッドを採掘開始するKubernetesのAPIへのポッド・アクセスを使用しようと、妥協や踏み台、偵察として使用することができます。
サンプルアプリケーションのポリシーによって保護されたセキュアなネットワークを使用します
テーマは、このガイドよりもネットワークポリシーは、はるかに大きなスペースを許可するように設計されています。この例では、次の手順を実行します。
- 为我们的default命名空间创建一个default-deny
Ingress策略。这意味着命名空间内的所有传入Pods的连接必须明确被允许; - 为每个示例应用程序组件创建一个Ingress NetworkPolicy对象,仅允许那些我们确定的对象。
步骤1:明确哪些组件应当可以相互通信
首先,我们需要提醒自己,应用程序的各个组件应该如何通信。为此,我们将回到在简介中看到的应用程序图:
从该图中可以看到:
- 外界需要到达yelb-ui的TCP端口80-(1)和(2)
- yelb-ui需要到达yelb-appserver的TCP端口4567
- yelb-appserver反过来将需要到达yelb-db的TCP端口5432,以及
- … yelb-cache的TCP端口6379。
步骤2:如何识别组件?
请记住,NetworkPolicy资源使用选择器来识别策略适用于哪个Pod,以及该策略将要控制的流量的源和目的地是什么。
在本演示中,我们将使用podSelectror方法,因此需要获取应用到应用程序Pod的标签列表。让我们查看cnawebapp-loadbalancer.yaml示例应用程序的清单,并收集标签:
现在准备编写我们的策略。
部署后,这些策略将以以下方式控制应用程序组件之间的通信:
步骤3:“default-deny”策略
确保您位于沙箱控制节点上,以root用户身份登录,并且位于正确的目录中:
#确认您是root账户
whoami | grep root || sudo -s
#切换到清单目录
cd /home/centos/yelb/deployments/platformdeployment/Kubernetes/yaml
在此步骤中,我们将创建一个策略,该策略将阻止所有未明确允许的网络通信。在这一演示中,我们将只限制Ingress流量;但实际上,您也可以控制Egress流量(但是这样做时要注意这可能会阻止DNS查询!):
策略基本上说:“对于任何Pod,都应用一个没有规则的Ingress策略”,这将导致应用这个策略的,所有流向这个命名空间Pods的传入流量被丢弃掉。
步骤4:“yelb-ui”的策略
该yelb-ui和其他组件在某种意义上说有一些不同,因为它是唯一一个可以被从外部访问的组件。因此,其ingress:定义将使用ipBlock的0.0.0.0/0,以表示“每个人”:
该策略表示:“对于具有应用标签app: yelb-ui和tier: frontend的Pods,允许传入来自任何源IP的流量,只要它去往Pod的TCP端口80”。
步骤5:示例应用中其他Pod的策略
我们示例应用程序中的其他3个Pod仅会看到来自其他Pod的流量,因此其策略将使用带有允许发送流量的Pod标签的podSelector参数:
步骤6:在应用策略之前测试
为了能有一个“前后”对比,让我们部署示例应用程序并获取基线:
#部署我们的应用
kubectl create -f cnawebapp-loadbalancer.yaml
等待应用启动并在外部可用:
#获得我们程序yelb-ui Service的外部DNS名字:
kubectl get svc -o wide | grep yelb-ui | awk '{print $4}'
我们应该可以看到类似a0b8dfc14916811e9b411026463a4a33-1258487840.us-west-1.elb.amazonaws.com的输出;在网络浏览器中打开它;样本应用程序应当加载了。 接下来,我们知道所有Pod通信都是不受限制的,因此我们应该能够从yelb-ui ping 到yelb-db——这是在应用程序正常运行且我们不进行故障排除动作的情况下,本来不应该发生的活动:
#获得"yelb-ui"的完整Pod名字
src_pod=$(kubectl get pods | grep yelb-ui | awk '{print $1}')
#获得"yelb-db"的IP:
db_pod_ip=$(kubectl get pods -o wide | grep yelb-db | awk '{print $6}')
#从"yelb-ui" ping"yelb-db":
kubectl exec -it ${src_pod} ping ${db_pod_ip}
我们应该看到该ping命令正在接收响应;因此存在不受限制的网络连接。按^ C停止命令。
步骤7:部署策略并测试结果
在最后一步,我们将部署策略并观察其效果:
#部署网络策略
kubectl create -f yelb-policy.yaml
运行上面的命令后,请等待几秒钟以稳定下来。Tungsten Fabric将在后台生成适当的安全组,并进行安装。让我们测试一下我们曾经可以正常运行的ping命令是否仍然有效:
#从"yelb-ui" ping “yelb-db” again:
kubectl exec -it ${src_pod} ping ${db_pod_ip}
这次,我们看到没有响应,因为该通信现在已被该策略阻止。接下来,测试是否仍可以通过网络浏览器访问该应用——应该可以!
步骤8:探索Tungsten Fabric的安全流量组可视化
Tungsten Fabric包含一个功能,可在“项目”中实现流量可视化,在我们的案例中,该项目对应于Kubernetes Namespace。
要访问它,请访问Carbide Evaluation Page链接,用于获取访问沙箱控制节点——在顶部有一个名为Contrail UI的链接,完成login和password的输入。单击链接,然后在左上角单击“Monitor”图标,然后在菜单中单击“Security” -> “Traffic Groups”。然后在顶部的标签链,在其末尾选择“k8s-default”:
您应该看到类似于以下的图表:
继续测试。您看到的流,代表示例应用程序在做的事情,包括无法从 yelb-uiping到yelb-db,以及yelb-appserver的出站请求(如果我们去查看,将转到yelb-db的DNS查询)。
清理
一旦进行了足够的探索,可以随时清理:
#卸载Network Policy
kubectl delete -f yelb-policy.yaml
#删除我们的示例应用程序:
kubectl delete -f cnawebapp-loadbalancer.yaml
#删除策略清单:
rm -f yelb-policy.yaml
回顾和资源
对于许多(即使不是全部)生产部署,控制应用程序的网络通信能力至关重要。在Kubernetes上运行的应用程序实现此类控件的方法是通过NetwokPolicy资源。但是,要使这些资源真正起作用,您需要一个支持它们的CNI插件。
Tungsten Fabric提供了完整的NetworkPolicy支持,无论集成Tungsten Fabric的Kubernetes在哪里运行,是在私有数据中心,还是在公共云中。
网络策略可以变得非常简单或非常复杂,而找出最适合您的应用程序的最佳方法,就是在我们提供的用例和示例基础上更深入地研究。这里有一些资源可能会有所帮助:
- 网络策略的详细介绍
- 一个不错的GitHub存储库,其中包含大量具有详细文档的网络策略清单示例
- 在2019Kubecon上的演讲中有一个介绍网络策略的很好的材料
(リソースのリンクの上には、をクリックしてダウンロード https://tungstenfabric.org.cn/assets/uploads/files/tf-ceg-case4.pdf文書閲覧)
外部
マーチミートアップ活動にTF中国人コミュニティはヘビー級のゲスト、動作の詳細なデモンストレーションによって展開と実用的なタングステンファブリックとK8Sを共有するために統合タングステンファブリックとK8Sに焦点を当てていない、とタングステンファブリックとK8Sに関するすべての質問にお答えします。ウォッチ「TF中国人コミュニティ」公共の数字、最新の活動情報。
これまでのところ、タングステンファブリックカーバイドガイド記事シリーズは、最後に過去のイベントを来る-
最初の章を:- TF超硬評価ガイドは、書類の準備
:第二Kubernetesサービス接続を介して基本的なアプリケーション
:パートIII Kubernetes進入することにより高度を外部アプリケーション接続
パートIV:Kubernetes名前空間によって、アプリケーションの初期分離を達成するために
注意マイクロ手紙:TF中国のコミュニティを
-mail:[email protected]