Demo - Network Policy
Create objects in ‘frontend’ Namespace
Create Namespace
Define Manifest
networkandcode@k8s-master-0:~$ cat ns-frontend.yaml <<EOF
---
apiVersion: v1
kind: Namespace
metadata:
name: frontend
...
EOF
Create API object using manifest
networkandcode@k8s-master-0:~$ kubectl create -f ns-frontend.yaml
namespace/frontend created
Verify
networkandcode@k8s-master-0:~$ kubectl get ns frontend
NAME STATUS AGE
frontend Active 35s
Create Deployment
Define Manifest
networkandcode@k8s-master-0:~$ cat deploy-frontend.yaml <<EOF
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: frontend
namespace: frontend
spec:
selector:
matchLabels:
role: frontend
template:
metadata:
labels:
role: frontend
spec:
containers:
- name: frontend
image: calico/star-probe:v0.1.0
command:
- probe
- --http-port=80
- --urls=http://frontend.frontend:80/status,http://backend.backend:6379/status,http://client.client:9000/status
ports:
- containerPort: 80
...
EOF
Create API object using manifest
networkandcode@k8s-master-0:~$ kubectl create -f deploy-frontend.yaml
deployment.apps/frontend created
Verify
networkandcode@k8s-master-0:~$ kubectl get deploy frontend -n frontend
NAME READY UP-TO-DATE AVAILABLE AGE
frontend 1/1 1 1 2m36s
Create Service
Define Manifest
networkandcode@k8s-master-0:~$ cat svc-frontend.yaml
---
apiVersion: v1
kind: Service
metadata:
name: frontend
namespace: frontend
spec:
selector:
role: frontend
ports:
- port: 80
...
Create API object using manifest
networkandcode@k8s-master-0:~$ kubectl create -f svc-frontend.yaml
service/frontend created
Verify
networkandcode@k8s-master-0:~$ kubectl get svc frontend -n frontend
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
frontend ClusterIP 10.104.202.128 <none> 80/TCP 2m16s
Create objects in ‘backend’ Namsespace
Create Namespace
Define manifest
networkandcode@k8s-master-0:~$ cat > ns-backend.yaml <<EOF
---
kind: Namespace
apiVersion: v1
metadata:
name: backend
...
Create API object using manifest
networkandcode@k8s-master-0:~$ kubectl create -f ns-backend.yaml
namespace/backend created
Verify
networkandcode@k8s-master-0:~$ kubectl get ns backend
NAME STATUS AGE
backend Active 25s
Create Deployment
Define Manifest
networkandcode@k8s-master-0:~$ cat deploy-backend.yaml <<EOF
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: backend
namespace: backend
spec:
selector:
matchLabels:
role: backend
template:
metadata:
labels:
role: backend
spec:
containers:
- name: backend
image: calico/star-probe:v0.1.0
command:
- probe
- --http-port=6379
- --urls=http://frontend.frontend:80/status,http://backend.backend:6379/status,http://client.client:9000/status
ports:
- containerPort: 6379
...
EOF
Create API object using Manifest
networkandcode@k8s-master-0:~$ kubectl create -f deploy-backend.yaml
deployment.apps/backend created
Verify
networkandcode@k8s-master-0:~$ kubectl get deploy backend -n backend
NAME READY UP-TO-DATE AVAILABLE AGE
backend 1/1 1 1 24m
Expose Deployment via a ClusterIP service
Define manifest
networkandcode@k8s-master-0:~$ cat svc-backend.yaml
---
apiVersion: v1
kind: Service
metadata:
name: backend
namespace: backend
spec:
ports:
- port: 6379
selector:
role: backend
...
Create API object using manifest
networkandcode@k8s-master-0:~$ kubectl create -f svc-backend.yaml
service/backend created
Verify
networkandcode@k8s-master-0:~$ kubectl get svc backend -n backend
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
backend ClusterIP 10.96.10.177 <none> 6379/TCP 2m42s
Create objects in ‘mgmt’ Namespace
Create Namespace
Define manifest
networkandcode@k8s-master-0:~$ cat > ns-mgmt.yaml <<EOF
---
kind: Namespace
apiVersion: v1
metadata:
name: mgmt
...
EOF
Create API object using manifest
networkandcode@k8s-master-0:~$ kubectl create -f ns-mgmt.yaml
namespace/mgmt created
Verify
networkandcode@k8s-master-0:~$ kubectl get ns mgmt
NAME STATUS AGE
mgmt Active 18m
Create Deployment
Define Manifest
networkandcode@k8s-master-0:~$ cat > deploy-mgmt.yaml <<EOF
---
kind: Deployment
apiVersion: apps/v1
metadata:
name: mgmt
namespace: mgmt
spec:
selector:
matchLabels:
role: mgmt
template:
metadata:
labels:
role: mgmt
spec:
containers:
- name: mgmt
image: calico/star-collect:v0.1.0
ports:
- containerPort: 9001
...
EOF
Create API object using manifest
networkandcode@k8s-master-0:~$ kubectl create -f deploy-mgmt.yaml
deployment.apps/mgmt created
Verify
networkandcode@k8s-master-0:~$ kubectl get deploy mgmt -n mgmt
NAME READY UP-TO-DATE AVAILABLE AGE
mgmt 1/1 1 1 6m10s
Expose Deployment via a NodePort service
Define manifest
networkandcode@k8s-master-0:~$ cat > svc-mgmt.yaml <<EOF
---
apiVersion: v1
kind: Service
metadata:
name: mgmt
namespace: mgmt
spec:
selector:
role: mgmt
type: NodePort
ports:
- port: 9001
...
EOF
Create API object using manifest
networkandcode@k8s-master-0:~$ kubectl create -f svc-mgmt.yaml
service/mgmt created
Verify
networkandcode@k8s-master-0:~$ kubectl get svc mgmt -n mgmt
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
mgmt NodePort 10.105.145.220 <none> 9001:32708/TCP 48s
Create objects in ‘client’ namespace
Create Namespace
Define manifest
networkandcode@k8s-master-0:~$ cat > ns-client.yaml <<EOF
---
kind: Namespace
apiVersion: v1
metadata:
name: client
...
EOF
Create API object using manifest
networkandcode@k8s-master-0:~$ kubectl create -f ns-client.yaml
namespace/client created
Verify
networkandcode@k8s-master-0:~$ kubectl get ns client
NAME STATUS AGE
client Active 121m
Create Deployment
Define Manifest
networkandcode@k8s-master-0:~$ cat > deploy-client.yaml <<EOF
---
kind: Deployment
apiVersion: apps/v1
metadata:
name: client
namespace: client
spec:
selector:
matchLabels:
role: client
template:
metadata:
labels:
role: client
spec:
containers:
- name: client
image: calico/star-collect:v0.1.0
ports:
- containerPort: 9000
...
EOF
Create API object
networkandcode@k8s-master-0:~$ kubectl create -f deploy-client.yaml
deployment.apps/client created
Verify
networkandcode@k8s-master-0:~$ kubectl get deploy client -n client
NAME READY UP-TO-DATE AVAILABLE AGE
client 1/1 1 1 94m
Expose the deployment using ClusterIP service
networkandcode@k8s-master-0:~$ cat svc-client.yaml
---
apiVersion: v1
kind: Service
metadata:
name: client
namespace: client
spec:
ports:
- port: 9000
selector:
role: client
...
Create API object using manifest
networkandcode@k8s-master-0:~$ kubectl create -f svc-client.yaml
service/client created
Verify
networkandcode@k8s-master-0:~$ kubectl get svc client -n client
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
client ClusterIP 10.108.119.142 <none> 9000/TCP 91m```
Let’s access the mgmt UI on NodePort
Check the node where the mgmt Pod is running
networkandcode@k8s-master-0:~$ kubectl get po -o wide -n mgmt | grep mgmt
mgmt-84dd4cc6ff-rrfdj 1/1 Running 0 10d 192.168.11.193 k8s-node-0 <none> <none>
Let’s check the Public IP of the node