YOKOHEI.COM

YOKOHEI.COM

›Amazon EKS

Kubernetes Basics

  • Kubernetes Basics
  • Commands
  • Static Pod
  • Drain & Uncordon
  • Cluster Upgrade
  • Backup & Restore
  • Certification
  • RBAC
  • CNI
  • CoreDNS
  • Ingress

Kubernetes the Hard Way

  • the Hard Way?
  • AWS Prerequisites
  • CA and TLS
  • Configuration Files
  • Data Encryption
  • Bootstrapping etcd
  • Bootstrapping Control Plane
  • Bootstrapping Worker Node
  • kubectl configuraton
  • Pod Network
  • RBAC for Kubelet
  • Coredns Add-On
  • Test
  • TLS Bootstrapping

Amazon EKS

  • EKS Introduction
  • Ingress with ALB
  • PersistentVolume with EBS
  • NetworkPolicy with Calico
  • Secret with KMS
  • EKS Hands-On

NetworkPolicy with Calico

EKS で NetworkPolicy を利用する場合、手動で Calico を導入する必要があるみたい。
(GCP では組み込まれている模様)
以下を参考に進める。

Amazon EKS に Calico をインストールする
https://docs.aws.amazon.com/ja_jp/eks/latest/userguide/calico.html

※ そもそも Calico って?
Kubernetes のみならず、 OpenStack や Mesos, Docker などといったプロジェクトとインテグレーションする OSS プロジェクトらしい。
SDN に近いようなプロジェクトっぽい。

導入

以下からマニフェストを持ってくる。

aws/amazon-vpc-cni-k8s | Github
https://github.com/aws/amazon-vpc-cni-k8s

$ kubectl apply -f https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/master/config/v1.2/calico.yaml
daemonset.extensions "calico-node" created
customresourcedefinition.apiextensions.k8s.io "felixconfigurations.crd.projectcalico.org" created
customresourcedefinition.apiextensions.k8s.io "bgpconfigurations.crd.projectcalico.org" created
customresourcedefinition.apiextensions.k8s.io "ippools.crd.projectcalico.org" created
customresourcedefinition.apiextensions.k8s.io "hostendpoints.crd.projectcalico.org" created
customresourcedefinition.apiextensions.k8s.io "clusterinformations.crd.projectcalico.org" created
customresourcedefinition.apiextensions.k8s.io "globalnetworkpolicies.crd.projectcalico.org" created
customresourcedefinition.apiextensions.k8s.io "globalnetworksets.crd.projectcalico.org" created
customresourcedefinition.apiextensions.k8s.io "networkpolicies.crd.projectcalico.org" created
serviceaccount "calico-node" created
clusterrole.rbac.authorization.k8s.io "calico-node" created
clusterrolebinding.rbac.authorization.k8s.io "calico-node" created
deployment.extensions "calico-typha" created
clusterrolebinding.rbac.authorization.k8s.io "typha-cpha" created
clusterrole.rbac.authorization.k8s.io "typha-cpha" created
configmap "calico-typha-horizontal-autoscaler" created
deployment.extensions "calico-typha-horizontal-autoscaler" created
role.rbac.authorization.k8s.io "typha-cpha" created
serviceaccount "typha-cpha" created
rolebinding.rbac.authorization.k8s.io "typha-cpha" created
service "calico-typha" created

$ kubectl get daemonset calico-node --namespace kube-system
NAME          DESIRED   CURRENT   READY     UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
calico-node   3         3         3         3            3           <none>          33s

calico-node が 3 台 READY になれば準備完了。

NetworkPolicy の作成

ベースは以下のような形である。

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: sample-networkpolicy
  namespace: default # NetworkPolicyを作成するNamespaceを指定
spec:
  podSelector:
    # 設定する対象のPodをここに書く
    # ラベルセレクタなので、複数のPodを対象にできる
  policyTypes:
  - Ingress # Ingressルールを作成する場合明示
  - Egress # Egressルールを作成する場合明示
  ingress:
  - from:
      # Ingressルールをここに書く(Egressルールと形式は同じ)
    ports:
      # このIngressルールで許可する受信Port番号とプロトコルを書く
  egress:
  - to:
      # Egressルールをここに書く(Ingressルールと形式は同じ)
    ports:
      # このEgressルールで許可する宛先Port番号とプロトコルを書く

テスト

以下のデモを参考にする。

Stars Policy Demo | Project Calico
https://docs.projectcalico.org/v3.1/getting-started/kubernetes/tutorials/stars-policy/

環境構築

以下 5 つのマニフェストを適用。

$ kubectl apply -f https://docs.projectcalico.org/v3.1/getting-started/kubernetes/tutorials/stars-policy/manifests/00-namespace.yaml
namespace "stars" created

$ kubectl apply -f https://docs.projectcalico.org/v3.1/getting-started/kubernetes/tutorials/stars-policy/manifests/01-management-ui.yaml
namespace "management-ui" created
service "management-ui" created
replicationcontroller "management-ui" created

$ kubectl apply -f https://docs.projectcalico.org/v3.1/getting-started/kubernetes/tutorials/stars-policy/manifests/02-backend.yaml
service "backend" created
replicationcontroller "backend" created

$ kubectl apply -f https://docs.projectcalico.org/v3.1/getting-started/kubernetes/tutorials/stars-policy/manifests/03-frontend.yaml
service "frontend" created
replicationcontroller "frontend" created

$ kubectl apply -f https://docs.projectcalico.org/v3.1/getting-started/kubernetes/tutorials/stars-policy/manifests/04-client.yaml
namespace "client" created
replicationcontroller "client" created
service "client" created

起動を確認。

$ kubectl get pods --all-namespaces
NAMESPACE       NAME                                                  READY     STATUS    RESTARTS   AGE
client          client-cstbk                                          1/1       Running   0          1m
management-ui   management-ui-bcddg                                   1/1       Running   0          2m
stars           backend-jrbs2                                         1/1       Running   0          2m
stars           frontend-kmqtl                                        1/1       Running   0          1m
...

NodePort で外部からの接続を受け付けようと思ったが、デフォルトで NodePort は作られているみたい。

$ kubectl get services --all-namespaces
NAMESPACE       NAME            TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
client          client          ClusterIP   172.20.185.194   <none>        9000/TCP         2h
default         kubernetes      ClusterIP   172.20.0.1       <none>        443/TCP          7d
kube-system     calico-typha    ClusterIP   172.20.80.158    <none>        5473/TCP         3h
kube-system     kube-dns        ClusterIP   172.20.0.10      <none>        53/UDP,53/TCP    7d
management-ui   management-ui   NodePort    172.20.191.49    <none>        9001:30002/TCP   2h
stars           backend         ClusterIP   172.20.218.80    <none>        6379/TCP         2h
stars           frontend        ClusterIP   172.20.230.212   <none>        80/TCP           2h

ワーカーノード (EC2) のセキュリティグループで 30002 を開けてあげれば、 web ブラウザから確認できる。

ネットワークポリシーについては別途まとめる。

← PersistentVolume with EBSSecret with KMS →
▼ Codes ▼
LeetCodeGitHub
▼ Profile ▼
LinkedInFlickr
▼ Logo made with DesignEvo ▼
DesignEvo
Copyright © 2020 Kohei Yoshida