前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >K8S namespace calico network policy

K8S namespace calico network policy

作者头像
heidsoft
发布2019-04-08 18:23:14
7410
发布2019-04-08 18:23:14
举报

Configure namespaces

This guide will deploy pods in a Kubernetes namespace. Let’s create the Namespace object for this guide.

代码语言:javascript
复制
kubectl create ns policy-demo

Create demo pods

We’ll use Kubernetes Deployment objects to easily create pods in the namespace.

  1. Create some nginx pods in the policy-demo namespace. kubectl run --namespace=policy-demo nginx --replicas=2 --image=nginx
  2. Expose them through a service. kubectl expose --namespace=policy-demo deployment nginx --port=80
  3. Ensure the nginx service is accessible. kubectl run --namespace=policy-demo access --rm -ti --image busybox /bin/sh This should open up a shell session inside the access pod, as shown below. Waiting for pod policy-demo/access-472357175-y0m47 to be running, status is Pending, pod ready: false If you don't see a command prompt, try pressing enter. / #
  4. From inside the access pod, attempt to reach the nginx service. wget -q nginx -O - You should see a response from nginx. Great! Our service is accessible. You can exit the pod now.

Enable isolation

Let’s turn on isolation in our policy-demo namespace. Calico will then prevent connections to pods in this namespace.

Running the following command creates a NetworkPolicy which implements a default deny behavior for all pods in the policy-demonamespace.

代码语言:javascript
复制
kubectl create -f - <<EOF
kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
  name: default-deny
  namespace: policy-demo
spec:
  podSelector:
    matchLabels: {}
EOF
Test Isolation

This will prevent all access to the nginx service. We can see the effect by trying to access the service again.

代码语言:javascript
复制
kubectl run --namespace=policy-demo access --rm -ti --image busybox /bin/sh

This should open up a shell session inside the access pod, as shown below.

代码语言:javascript
复制
Waiting for pod policy-demo/access-472357175-y0m47 to be running, status is Pending, pod ready: false

If you don't see a command prompt, try pressing enter.

/ #

Now from within the busybox access pod execute the following command to test access to the nginx service.

代码语言:javascript
复制
wget -q --timeout=5 nginx -O -

The request should time out after 5 seconds.

代码语言:javascript
复制
wget: download timed out
/ #

By enabling isolation on the namespace, we’ve prevented access to the service.

Allow access using a network policy

Now, let’s enable access to the nginx service using a NetworkPolicy. This will allow incoming connections from our access pod, but not from anywhere else.

Create a network policy access-nginx with the following contents:

代码语言:javascript
复制
kubectl create -f - <<EOF
kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
  name: access-nginx
  namespace: policy-demo
spec:
  podSelector:
    matchLabels:
      run: nginx
  ingress:
    - from:
      - podSelector:
          matchLabels:
            run: access
EOF

Note: The NetworkPolicy allows traffic from Pods with the label run: access to Pods with the label run: nginx. These are the labels automatically added to Pods started via kubectl run based on the name of the Deployment.

We should now be able to access the service from the access pod.

代码语言:javascript
复制
kubectl run --namespace=policy-demo access --rm -ti --image busybox /bin/sh

This should open up a shell session inside the access pod, as shown below.

代码语言:javascript
复制
Waiting for pod policy-demo/access-472357175-y0m47 to be running, status is Pending, pod ready: false

If you don't see a command prompt, try pressing enter.

/ #

Now from within the busybox access pod execute the following command to test access to the nginx service.

代码语言:javascript
复制
wget -q --timeout=5 nginx -O -

However, we still cannot access the service from a pod without the label run: access. We can verify this as follows.

代码语言:javascript
复制
kubectl run --namespace=policy-demo cant-access --rm -ti --image busybox /bin/sh

This should open up a shell session inside the cant-access pod, as shown below.

代码语言:javascript
复制
Waiting for pod policy-demo/cant-access-472357175-y0m47 to be running, status is Pending, pod ready: false

If you don't see a command prompt, try pressing enter.

/ #

Now from within the busybox cant-access pod execute the following command to test access to the nginx service.

代码语言:javascript
复制
wget -q --timeout=5 nginx -O -

The request should time out.

代码语言:javascript
复制
wget: download timed out
/ #

You can clean up the demo by deleting the demo namespace.

代码语言:javascript
复制
kubectl delete ns policy-demo

This was just a simple example of the Kubernetes NetworkPolicy API and how Calico can secure your Kubernetes cluster. For more information on network policy in Kubernetes, see the Kubernetes user-guide.

For a slightly more detailed demonstration of policy, check out the stars demo.

demo: https://docs.projectcalico.org/v3.6/security/stars-policy/

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-03-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云数智圈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Configure namespaces
  • Create demo pods
  • Enable isolation
    • Test Isolation
    • Allow access using a network policy
    相关产品与服务
    容器服务
    腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档