总目录索引:K8s网络Calico 从入门到放弃系列

1、创建服务

创建名称空间

kubectl create ns policy-demo

在policy-demo命名空间中创建两个副本的Nginx Pod

kubectl run --namespace=policy-demo nginx --replicas=2 --image=nginx

如果你和我反馈一样:

Flag --replicas has been deprecated, has no effect and will be removed in the future

是因为在K8S v1.18.0以后,–replicas已弃用 ,推荐用 deployment  创建 pods

vim nginx-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  namespace: policy-demo
  labels:
    app: nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80 
kubectl apply -f nginx-deployment.yaml

通过服务暴露nginx的80端口

kubectl expose --namespace=policy-demo deployment nginx --port=80

kubectl get all -n policy-demo

Calico网络基础_第1张图片

通过busybox的pod去访问nginx服务

kubectl run --namespace=policy-demo access --rm -ti --image busybox /bin/sh

wget -q nginx -O -

Calico网络基础_第2张图片

2、启用网络隔离

    在policy-demo命名空间中打开隔离。然后,Calico将阻止连接到该命名空间中的Pod。运行以下命令将创建一个NetworkPolicy,该策略将对policy-demo名称空间中的所有Pod实现默认的拒绝行为。

kubectl create -f - < 
  

3、测试隔离

将阻止所有对Nginx服务的访问。通过尝试再次访问该服务,可以看到效果

kubectl run --namespace=policy-demo access --rm -ti --image busybox /bin/sh

wget -q --timeout=5 nginx -O -

会发现连接超时

image-20200424164137593.png

4、允许通过网络策略进行访问

现在,使用NetworkPolicy启用对nginx服务的访问。这将允许从accessPod 传入的连接,但不能从其他任何地方传入。

创建access-nginx具有以下内容的网络策略:

kubectl create -f - < 
  

accessPod 访问该服务

kubectl run --namespace=policy-demo access --rm -ti --image busybox /bin/sh

wget -q --timeout=5 nginx -O -

Calico网络基础_第3张图片

如果没有标签run: access,仍然无法从访问服务,验证如下

kubectl run --namespace=policy-demo cant-access --rm -ti --image busybox /bin/sh

wget -q --timeout=5 nginx -O -

image-20200424170446307.png

最后可以根据自己需求通过删除名称空间

kubectl delete ns policy-demo

参考文章:https://docs.projectcalico.org/security/tutorials/kubernetes-policy-basic