EKSにcalicoをデプロイする

# 参考
https://docs.aws.amazon.com/ja_jp/eks/latest/userguide/calico.html
https://docs.projectcalico.org/security/tutorials/kubernetes-policy-demo/kubernetes-demo

# calicoとは
- NetworkPolicyよりも柔軟な通信制御ができる
- 具体的にはNamespace間で疎通をブロックさせたりできる
    - それは標準のNetworkPolicyではできない

# calicoのデプロイ

## 本体となるDeamonSetをデプロイ

```
kubectl apply -f https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/master/config/master/calico-operator.yaml
kubectl apply -f https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/master/config/master/calico-crs.yaml
```

## deamonsetの確認

```
kubectl get daemonset calico-node --namespace calico-system 
```

```
NAME          DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR            AGE
calico-node   2         2         2       2            2           kubernetes.io/os=linux   103s
```

# 動作確認

## 
```
kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/tutorials/stars-policy/manifests/00-namespace.yaml
kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/tutorials/stars-policy/manifests/01-management-ui.yaml
kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/tutorials/stars-policy/manifests/02-backend.yaml
kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/tutorials/stars-policy/manifests/03-frontend.yaml
kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/tutorials/stars-policy/manifests/04-client.yaml
```

## UIの表示
```
kubectl port-forward service/management-ui -n management-ui 9001
```

### アクセス
- C → ClientService
- F → フロントエンドサービス
- B → バックエンドサービス

という意味らしい

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/293481/e9c99e78-10c1-e054-c0e6-842525c2bd20.png)

## サービスの分断
```
kubectl apply -n stars -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/tutorials/stars-policy/policies/default-deny.yaml
kubectl apply -n client -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/tutorials/stars-policy/policies/default-deny.yaml
```

### アクセス
管理UIへのアクセスが遮断されている

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/293481/41f1a6af-cd21-e895-809e-c4a489cb6677.png)

## 管理UIへアクセスできるようにポリシーを適用
```
kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/tutorials/stars-policy/policies/allow-ui.yaml
kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/tutorials/stars-policy/policies/allow-ui-client.yaml
```

### アクセス

管理UIへはアクセスできるが、ノード？は相互にアクセスできなくなっている
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/293481/4f17f087-7ad7-f96f-0106-0ec8d16fbe43.png)

## フロントエンドからバックエンドへの通信許可
```
kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/tutorials/stars-policy/policies/frontend-policy.yaml
```

## クライアントからフロントエンドサービスへの通信許可

```
kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/tutorials/stars-policy/policies/frontend-policy.yaml
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/293481/3ec6bb23-36f7-4ca1-527b-7d7b9933ae49.png)

## 削除
```
kubectl delete -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/tutorials/stars-policy/manifests/04-client.yaml
kubectl delete -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/tutorials/stars-policy/manifests/03-frontend.yaml
kubectl delete -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/tutorials/stars-policy/manifests/02-backend.yaml
kubectl delete -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/tutorials/stars-policy/manifests/01-management-ui.yaml
kubectl delete -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/tutorials/stars-policy/manifests/00-namespace.yaml
```