题目

在这里插入图片描述

分析

创建一个名字为all-port-from-namespace的NetworkPolicy。
这个NetworkPolicy允许internal命名空间下的Pod访问该命名空间下的9000端口。
不允许不是internal命令空间的下的Pod访问
不允许访问没有监听9000端口的Pod。
注意:这里为了验证结果,后续使用了端口80。

命令

环境搭建

创建命名空间internal

kubectl create ns internal

在这里插入图片描述
busy-box-for-internal.yaml

apiVersion: v1
kind: Pod
metadata:
  name: busybox-demo
spec:
  containers:
  - name: busybox
    image: busybox:latest
    imagePullPolicy: IfNotPresent
    command: ['sh','-c','sleep 3600']

在命名空间internal创建pod busy-box

kubectl create busy-box-for-internal.yaml -n internal

nginx-demo-for-internal.yaml

apiVersion: v1
kind: Pod
metadata:
  name: nginx-demo
spec:
  containers:
  - name: nginx
    image: nginx:1.14.2
    ports:
    - containerPort: 80

在命名空间internal创建pod nginx-demo

kubectl create nginx-demo-for-internal.yaml -n internal

在这里插入图片描述

解题

all-port-from-namespace.yaml

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: all-port-from-namespace
  namespace: internal
spec:
  podSelector: {}
  policyTypes:
    - Ingress
  ingress:
    - from:
      - podSelector: {}
      ports:
      - port: 80
        protocol: TCP

创建NetworkPolicy all-port-from-namespace

kubectl create -f all-port-from-namespace.yaml

结果

创建NetworkPolicy之前
在这里插入图片描述
创建NetworkPolicy之后
在这里插入图片描述
可以看到,创建后,internal之外的Pod无法访问

参考

k8s学习-kubectl命令常用选项详解与实战

更多k8s相关内容,请看文章:k8s学习-思维导图与学习笔记

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐