diff --git a/cn/docs/tasks/administer-cluster/calico-network-policy.md b/cn/docs/tasks/administer-cluster/calico-network-policy.md new file mode 100644 index 0000000000..0ec16607e9 --- /dev/null +++ b/cn/docs/tasks/administer-cluster/calico-network-policy.md @@ -0,0 +1,74 @@ +--- +approvers: +- caseydavenport +title: 使用 Calico 来提供 NetworkPolicy +--- + + +{% capture overview %} +本页展示怎么样使用 Calico 来提供 NetworkPolicy +{% endcapture %} + + +{% capture prerequisites %} +* 为 Kubernetes 安装 Calico +{% endcapture %} + +{% capture steps %} + +## 使用 Calico 部署一个集群 + + +使用如下命令,您可以在默认的 [GCE 部署环境中](/docs/getting-started-guides/gce) 部署一个使用 Calico 来提供网络策略的集群: + +```shell +export NETWORK_POLICY_PROVIDER=calico +export KUBE_NODE_OS_DISTRIBUTION=debian +curl -sS https://get.k8s.io | bash +``` + + +如果希望了解其它的部署选项,请您参考 [Calico 项目文档](http://docs.projectcalico.org/) +{% endcapture %} + +{% capture discussion %} + +## 理解 Calico 组件 + + +部署使用 Calico 的集群其实是增加了支持 Kubernetes NetworkPolicy 的 Pods, 这些 Pods 运行在 `kube-system` 命名空间下。 + + +使用如下方式去查看这些运行的 Pods: + +```shell +kubectl get pods --namespace=kube-system +``` + + +您可以看到类似下面这样的一个 Pods 列表: + +```console +NAME READY STATUS RESTARTS AGE +calico-node-kubernetes-minion-group-jck6 1/1 Running 0 46m +calico-node-kubernetes-minion-group-k9jy 1/1 Running 0 46m +calico-node-kubernetes-minion-group-szgr 1/1 Running 0 46m +calico-policy-controller-65rw1 1/1 Running 0 46m +... +``` + + +主要有两种组件 + + +- 在集群的每个节点上都会运行一个以 `calico-node` 开头命名的 Pod,用于配置 iptables 去实现那些机器上 Pods 的出/入网络策略 + +- 整个集群环境只有一个以 `calico-policy-controller` 开头命名的 Pod,用于从 Kubernetes API 中读取策略和标签信息,适当的对 Calico 进行配置 +{% endcapture %} + + +{% capture whatsnext %} +集群部署完成之后,您可以通过 [NetworkPolicy 入门指南](/docs/getting-started-guides/network-policy/walkthrough)去尝试使用 Kubernetes NetworkPolicy +{% endcapture %} + +{% include templates/task.md %} diff --git a/cn/docs/tasks/administer-cluster/declare-network-policy.md b/cn/docs/tasks/administer-cluster/declare-network-policy.md new file mode 100644 index 0000000000..d43ca3770f --- /dev/null +++ b/cn/docs/tasks/administer-cluster/declare-network-policy.md @@ -0,0 +1,147 @@ +--- +approvers: +- caseydavenport +- danwinship +title: 声明网络策略 +--- + +{% capture overview %} + + +本文可以帮助您开始使用 Kubernetes 的 [NetworkPolicy API](/docs/concepts/services-networking/network-policies/) 声明网络策略去管理 Pod 之间的通信 + +{% endcapture %} + +{% capture prerequisites %} + + +您首先需要有一个支持网络策略的 Kubernetes 集群。已经有许多支持 NetworkPolicy 的网络提供商,包括: + +* [Calico](/docs/tasks/configure-pod-container/calico-network-policy/) +* [Romana](/docs/tasks/configure-pod-container/romana-network-policy/) +* [Weave 网络](/docs/tasks/configure-pod-container/weave-network-policy/) + + +**注意**:以上列表是根据产品名称按字母顺序排序,而不是按推荐或偏好排序。下面示例对于使用了上面任何提供商的 Kubernetes 集群都是有效的 + +{% endcapture %} + +{% capture steps %} + + +## 创建一个`nginx` deployment 并且通过服务将其暴露 + + +为了查看 Kubernetes 网络策略是怎样工作的,可以从创建一个`nginx` deployment 并且通过服务将其暴露开始 + +```console +$ kubectl run nginx --image=nginx --replicas=2 +deployment "nginx" created +$ kubectl expose deployment nginx --port=80 +service "nginx" exposed +``` + + +在 default 命名空间下运行了两个 `nginx` pod,而且通过一个名字为 `nginx` 的服务进行了暴露 + +```console +$ kubectl get svc,pod +NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE +svc/kubernetes 10.100.0.1 443/TCP 46m +svc/nginx 10.100.0.16 80/TCP 33s + +NAME READY STATUS RESTARTS AGE +po/nginx-701339712-e0qfq 1/1 Running 0 35s +po/nginx-701339712-o00ef 1/1 Running 0 35s +``` + + +## 测试服务能够被其它的 pod 访问 + + +您应该可以从其它的 pod 访问这个新的 `nginx` 服务。为了验证它,从 default 命名空间下的其它 pod 来访问该服务。请您确保在该命名空间下没有执行孤立动作。 + + +启动一个 busybox 容器,然后在容器中使用 `wget` 命令去访问 `nginx` 服务: + +```console +$ kubectl run busybox --rm -ti --image=busybox /bin/sh +Waiting for pod default/busybox-472357175-y0m47 to be running, status is Pending, pod ready: false + +Hit enter for command prompt + +/ # wget --spider --timeout=1 nginx +Connecting to nginx (10.100.0.16:80) +/ # +``` + + +## 限制访问 `nginx` 服务 + + +如果说您想限制 `nginx` 服务,只让那些拥有标签 `access: true` 的 pod 访问它,那么您可以创建一个只允许从那些 pod 连接的 `NetworkPolicy`: + +```yaml +kind: NetworkPolicy +apiVersion: networking.k8s.io/v1 +metadata: + name: access-nginx +spec: + podSelector: + matchLabels: + run: nginx + ingress: + - from: + - podSelector: + matchLabels: + access: "true" +``` + + +## 为服务指定策略 + + +使用 kubectl 工具根据上面的 nginx-policy.yaml 文件创建一个 NetworkPolicy: + +```console +$ kubectl create -f nginx-policy.yaml +networkpolicy "access-nginx" created +``` + + +## 当访问标签没有定义时测试访问服务 + + +如果您尝试从没有设定正确标签的 pod 中去访问 `nginx` 服务,请求将会超时: + +```console +$ kubectl run busybox --rm -ti --image=busybox /bin/sh +Waiting for pod default/busybox-472357175-y0m47 to be running, status is Pending, pod ready: false + +Hit enter for command prompt + +/ # wget --spider --timeout=1 nginx +Connecting to nginx (10.100.0.16:80) +wget: download timed out +/ # +``` + + +## 定义访问标签后再次测试 + + +创建一个拥有正确标签的 pod,您将看到请求是被允许的: + +```console +$ kubectl run busybox --rm -ti --labels="access=true" --image=busybox /bin/sh +Waiting for pod default/busybox-472357175-y0m47 to be running, status is Pending, pod ready: false + +Hit enter for command prompt + +/ # wget --spider --timeout=1 nginx +Connecting to nginx (10.100.0.16:80) +/ # +``` +{% endcapture %} + +{% include templates/task.md %} diff --git a/cn/docs/tasks/administer-cluster/romana-network-policy.md b/cn/docs/tasks/administer-cluster/romana-network-policy.md new file mode 100644 index 0000000000..ec542ceac2 --- /dev/null +++ b/cn/docs/tasks/administer-cluster/romana-network-policy.md @@ -0,0 +1,50 @@ +--- +approvers: +- chrismarino +title: 使用 Romana 来提供 NetworkPolicy +--- + +{% capture overview %} + + +本页展示怎么样使用 Romana 来提供 NetworkPolicy + +{% endcapture %} + +{% capture prerequisites %} + + +完成 [kubeadm 入门指南](/docs/getting-started-guides/kubeadm/)中的步骤1、2和3 + +{% endcapture %} + +{% capture steps %} + + +## 使用 kubeadm 安装 Romana + + +按照[容器化安装指南](https://github.com/romana/romana/tree/master/containerize)中使用 kubeadm 的方式安装 + + +## 应用网络策略 + + +要应用网络策略,请使用以下方式之一: + + +* [Romana 网络策略](https://github.com/romana/romana/wiki/Romana-policies) + * [Romana 网络策略示例](https://github.com/romana/core/tree/master/policy) + +* NetworkPolicy API + +{% endcapture %} + +{% capture whatsnext %} + + +Romana 安装完成之后,您可以通过 [NetworkPolicy 入门指南](/docs/getting-started-guides/network-policy/walkthrough)去尝试使用 Kubernetes NetworkPolicy + +{% endcapture %} + +{% include templates/task.md %} diff --git a/cn/docs/tasks/administer-cluster/weave-network-policy.md b/cn/docs/tasks/administer-cluster/weave-network-policy.md new file mode 100644 index 0000000000..6d744bef8e --- /dev/null +++ b/cn/docs/tasks/administer-cluster/weave-network-policy.md @@ -0,0 +1,118 @@ +--- +approvers: +- bboreham +title: 使用 Weave 网络来提供 NetworkPolicy +--- + +{% capture overview %} + + +本页展示怎么样使用 Weave 网络来提供 NetworkPolicy + +{% endcapture %} + +{% capture prerequisites %} + + +完成 [kubeadm 入门指南](/docs/getting-started-guides/kubeadm/)中的步骤1、2和3 + +{% endcapture %} + +{% capture steps %} + + +## 安装 Weave 网络插件 + + +按照[通过插件方式集成到 Kubernetes ](https://www.weave.works/docs/net/latest/kube-addon/)指南完成安装 + + +Kubernetes 的 Weave 网络插件配有一个[网络策略控制器](https://www.weave.works/docs/net/latest/kube-addon/#npc),它监控所有命名空间下 NetworkPolicy 相关的注解,然后配置 iptables 规则生成允许或者阻断通信的策略 + +{% endcapture %} + +{% capture example %} + + +## 命名空间隔离示例 + + +1. 创建携带 `DefaultDeny` 标识的命名空间 + +```yaml +kind: Namespace +apiVersion: v1 +metadata: + name: myns + annotations: + net.beta.kubernetes.io/network-policy: | + { + "ingress": { + "isolation": "DefaultDeny" + } + } +``` + + +2. 在命名空间下创建2个 pod + +```yaml +kind: Pod +apiVersion: v1 +metadata: + name: pod1 + namespace: myns + labels: + inns: "yes" +spec: + containers: + - name: pod1 + image: nginx +--- +kind: Pod +apiVersion: v1 +metadata: + name: pod2 + namespace: myns + labels: + inns: "yes" +spec: + containers: + - name: pod2 + image: nginx +``` + + +3. 获取 pod 的 IP 地址 + +```shell +kubectl get po -n myns -o wide +``` + +**注意:** 如果您对 pod 的 cURL 请求是被禁止的,请尝试在 pod 中访问其它的 pod + + +4. 创建一个允许 pod 访问命名空间内其它 pod 的 Kubernetes NetworkPolicy + +```yaml +apiVersion: networking.k8s.io/v1 +kind: NetworkPolicy +metadata: + name: aaa + namespace: myns +spec: + podSelector: + matchExpressions: + - {key: inns, operator: In, values: ["yes"]} + ingress: + - from: + - podSelector: + matchExpressions: + - {key: inns, operator: In, values: ["yes"]} +``` + +Weave 网络插件安装完成之后,您可以通过 [NetworkPolicy 入门指南](/docs/getting-started-guides/network-policy/walkthrough)去尝试使用 Kubernetes NetworkPolicy + +{% endcapture %} + +{% include templates/task.md %}