- 開発技術
Amazon Linux2 + aws-k8s-cniでKubernetesの構築
- #Kubernetes
目次
目的
【エンジニア募集中】フルリモート可◎、売上/従業員数9年連続UP、平均残業8時間、有給取得率90%、年休124日以上 etc. 詳細はこちらから>
AWSにKubernetes(以下K8S)構築する場合、EKSを使用するのが一般的ですが
EKSは費用が高い(月額1万程)ため、検証用に使用する目的で
Amazon Linx2にK8Sを構築します。
こちらの記事は検証目的のため、本番運用の参考にはしないで下さい。
前提
・AWSのアカウントは取得済みであること
注意
この手順で「ec2-net-utils」をアンインストールする影響で
インスタンス再起動時にパブリックIPの割り当てがされなくなります。
今回の手順は検証用にパブリックサブネットで構築していますが、
実際にはプライベートサブネットで構築をお願いします。
準備各リソースの名前
K8Sクラスタ名:dev-k8s-cluster
K8SマスターEC2:dev-k8s-master
K8SノードEC2:dev-k8s-node
EC2に必要なリソースの作成
AWSコンソールを使用して作業を行います。
①IAMロールの作成
②信頼されたエンティティを選択します。
エンティティタイプ:AWSのサービス
ユースケース:EC2
③使用ロールを選択します。
使用ロール:AmazonEC2ContainerRegistryReadOnly
④ロールを作成します。
ロール名:dev-k8s-role
⑤セキュリティグループの作成
⑥セキュリティグループを作成します。
セキュリティグループ名:dev-k8s-security
説明:k8s ec2 security group
VPC:デフォルトVPC
※ここではインバンドルールには何設定しなくてよいです。
作成が完了後にセキュリティグループIDをメモします。
⑦インバンドルールを編集します。
SSH:マイIP
全てのトラフィック:⑥でメモしたセキュリティグループID
K8SマスターEC2の作成
AWSコンソールを使用して作業を行います。
①EC2のメニューでインスタンスを起動します。
②タグを設定します。
キー:Name、値:dev-k8s-master
キー:kubernetes.io/cluster/dev-k8s-cluster※各自クラスタ名に置き換えてください。、値:owned
キー:k8s-control-plane、値:※なしで構いません。
③AMIはAmazon Linuxを設定します。
④インスタンスタイプを設定します。
インスタンスタイプ:t3.small
※t3.smallですとK8Sを起動するだけでメモリが枯渇しますので
余裕が欲しい場合はインスタンスタイプを上げて下さい。
⑤キーペアを作成します。
キーペア名:dev-k8s-key
⑥ネットワークの設定します。
準備で作成した既存のセキュリティグループを選択します。
セキュリティグループ名:dev-k8s-security
⑦ストレージを設定します。
ルートボリューム:20G
⑧高度な詳細を設定します。
IAMインスタンスプロフィールに準備で作成したロールを設定します。
ロール名:dev-k8s-role
⑨EC2を起動します。
マスターEC2にK8Sのインストール
teraterm等のツールでK8SマスターEC2にSSHでログインして作業を行います。
①K8SマスターEC2のパブリックIP確認
AWSコンソールでEC2の一覧から「dev-k8s-master」の詳細を確認します。
②teratermでK8SマスターEC2にログインします。
IP:①で確認したパブリックIP
ユーザ名:ec2-user
鍵ファイル:上記で作成した「dev-k8s-key」
③EC2を最新の状態にアップデートします。
1 |
sudo yum update -y |
④ec2-net-utilsをアンインストールします。
後述のaws-k8s-cniプラグインを入れる時にec2-net-utilsが入っていると
挙動が不安定になるため、アンインストールします。
1 |
1sudo yum remove ec2-net-utils -y |
⑤コンテナランタイムをインストールします。
ランタイムはcontainerdを使用します。
1 2 |
sudo amazon-linux-extras enable docker sudo yum install containerd -y |
containerdを自動起動するように設定します。
1 |
sudo systemctl enable --now containerd |
ステータスを確認します。
⑥OSパラメータを設定します。
1 2 3 4 5 6 7 8 9 10 11 12 |
cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf overlay br_netfilter EOF sudo modprobe overlay sudo modprobe br_netfilter cat <<EOF | sudo tee /etc/sysctl.d/99-containerd.conf net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 net.bridge.bridge-nf-call-ip6tables = 1 EOF sudo sysctl --system |
⑦containerdのconfig.tomlを設定します。
デフォルト設定を作成します。
1 2 |
sudo mkdir -p /etc/containerd sudo containerd config default | sudo tee /etc/containerd/config.toml |
config.tomlのパラメータを変更します。
1 |
1sudo vi /etc/containerd/config.toml |
変更内容
1 2 3 4 |
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc] ... [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] SystemdCgroup = true # ★ここの値を変更します。 |
設定を反映します。
1 |
1sudo systemctl restart containerd |
⑧kubeadmインストール時に警告が出るためtcモジュールを追加します。
1 |
sudo ym install -y tc |
⑨kubeadm, kubelet, kubectlをインストールします。
K8S用のリポジトリを追加します。
1 |
sudo vi /etc/yum.repos.d/kubernetes.repo |
ファイル内容:/etc/yum.repos.d/kubernetes.repo
1 2 3 4 5 6 7 8 |
[kubernetes] name=Kubernetes baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-\$basearch enabled=1 gpgcheck=1 repo_gpgcheck=0 gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg exclude=kubelet kubeadm kubectl |
インストールします。
※今回はバージョン1.23をインストールします。
1 |
1sudo yum install kubelet-1.23.7-0 kubectl-1.23.7-0 kubeadm-1.23.7-0 --disableexcludes=kubernetes -y |
kubeletを自動起動するように設定します。
1 |
1sudo systemctl enable --now kubelet |
ステータスを確認します。
ここではK8Sの構築が完了していないため、停止状態となっています。
1 |
sudo systemctl status kubelet |
⑩kubeadmを使用してK8Sをインストールします。
K8S用設定ファイルを作成します。
1 |
vi config.yaml |
ファイル内容:config.yaml
1 2 3 4 5 6 7 8 9 |
apiVersion: kubeadm.k8s.io/v1beta3 kind: InitConfiguration nodeRegistration: criSocket: "/run/containerd/containerd.sock" --- apiVersion: kubeadm.k8s.io/v1beta3 kind: ClusterConfiguration clusterName: "dev-k8s-cluster" # ★各自クラスタ名に置き換えてください。 controlPlaneEndpoint: ip-172-31-21-87.ap-northeast-1.compute.internal:6443 # ★hostnameコマンド等で取得したホスト名に置き換えてください。 |
kubeadmコマンドでK8Sをインストールします。
1 |
sudo kubeadm init --config config.yaml |
インストール完了時に表示されるコマンドをメモします。※上記赤枠部分
1 2 |
kubeadm join ip-172-31-21-87.ap-northeast-1.compute.internal:6443 --token 6q1g4f.4m1dibndp5h0o5sn \ --discovery-token-ca-cert-hash sha256:cd753371f8fbd3802377ba35809648647a5e6295e09f2de6fb3e00f387fbeddc |
こちらはK8Sノードを追加する時に必要になりますので、必ずメモしましょう。
⑪kubectlコマンドを設定します。
ec2-userでkubectlコマンドを使用するための設定を行います。
1 2 3 |
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config |
kubectlコマンドでポットの状態を確認します。
1 |
kubectl get po -A |
※corednsがPendingとなっていますが、まだネットワークプラグインを入れる前なので問題ありません。
K8Sネットワークプラグインのイントール
①AWSコンソールでEC2のロールに権限を追加します。
ロール名:dev-k8s-role
②インラインポリシーにjsonで入力します。
必要なiamは以下に記載されています。
amazon-vpc-cni-k8s/iam-policy.md at master · aws/amazon-vpc-cni-k8s
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:AssignPrivateIpAddresses", "ec2:AttachNetworkInterface", "ec2:CreateNetworkInterface", "ec2:DeleteNetworkInterface", "ec2:DescribeInstances", "ec2:DescribeTags", "ec2:DescribeNetworkInterfaces", "ec2:DescribeInstanceTypes", "ec2:DetachNetworkInterface", "ec2:ModifyNetworkInterfaceAttribute", "ec2:UnassignPrivateIpAddresses", "ec2:ModifyInstanceAttribute" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "ec2:CreateTags" ], "Resource": [ "arn:aws:ec2:*:*:network-interface/*" ] } ] } |
③インラインポリシーを作成します。
インラインポリシー名:dev-amazon-vpc-cni-k8s
④amazon-vpc-cni-k8sのyamlファイルをgitから取得します。
gitコマンドをインストールします。
1 |
sudo yum install git -y |
今回はバージョン1.11.3を取得します
1 |
git clone https://github.com/aws/amazon-vpc-cni-k8s.git -b v1.11.3 |
設定ファイルを編集します。
1 2 |
cp amazon-vpc-cni-k8s/config/master/aws-k8s-cni.yaml amazon-vpc-cni-k8s/config/master/aws-k8s-cni.yaml.org vi amazon-vpc-cni-k8s/config/master/aws-k8s-cni.yaml |
イメージの取得先とランタイムを変更します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 |
--- # Source: aws-vpc-cni/templates/serviceaccount.yaml apiVersion: v1 kind: ServiceAccount metadata: name: aws-node namespace: kube-system labels: app.kubernetes.io/name: aws-node app.kubernetes.io/instance: aws-vpc-cni k8s-app: aws-node app.kubernetes.io/version: "v1.11.3" --- # Source: aws-vpc-cni/templates/customresourcedefinition.yaml apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: name: eniconfigs.crd.k8s.amazonaws.com labels: app.kubernetes.io/name: aws-node app.kubernetes.io/instance: aws-vpc-cni k8s-app: aws-node app.kubernetes.io/version: "v1.11.3" spec: scope: Cluster group: crd.k8s.amazonaws.com preserveUnknownFields: false versions: - name: v1alpha1 served: true storage: true schema: openAPIV3Schema: type: object x-kubernetes-preserve-unknown-fields: true names: plural: eniconfigs singular: eniconfig kind: ENIConfig --- # Source: aws-vpc-cni/templates/clusterrole.yaml apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: aws-node labels: app.kubernetes.io/name: aws-node app.kubernetes.io/instance: aws-vpc-cni k8s-app: aws-node app.kubernetes.io/version: "v1.11.3" rules: - apiGroups: - crd.k8s.amazonaws.com resources: - eniconfigs verbs: ["list", "watch", "get"] - apiGroups: [""] resources: - namespaces verbs: ["list", "watch", "get"] - apiGroups: [""] resources: - pods verbs: ["list", "watch", "get"] - apiGroups: [""] resources: - nodes verbs: ["list", "watch", "get", "update"] - apiGroups: ["extensions"] resources: - '*' verbs: ["list", "watch"] - apiGroups: ["", "events.k8s.io"] resources: - events verbs: ["create", "patch", "list", "get"] --- # Source: aws-vpc-cni/templates/clusterrolebinding.yaml apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: aws-node labels: app.kubernetes.io/name: aws-node app.kubernetes.io/instance: aws-vpc-cni k8s-app: aws-node app.kubernetes.io/version: "v1.11.3" roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: aws-node subjects: - kind: ServiceAccount name: aws-node namespace: kube-system --- # Source: aws-vpc-cni/templates/daemonset.yaml kind: DaemonSet apiVersion: apps/v1 metadata: name: aws-node namespace: kube-system labels: app.kubernetes.io/name: aws-node app.kubernetes.io/instance: aws-vpc-cni k8s-app: aws-node app.kubernetes.io/version: "v1.11.3" spec: updateStrategy: rollingUpdate: maxUnavailable: 10% type: RollingUpdate selector: matchLabels: k8s-app: aws-node template: metadata: labels: app.kubernetes.io/name: aws-node app.kubernetes.io/instance: aws-vpc-cni k8s-app: aws-node spec: priorityClassName: "system-node-critical" serviceAccountName: aws-node hostNetwork: true initContainers: - name: aws-vpc-cni-init image: "602401143452.dkr.ecr.ap-northeast-1.amazonaws.com/amazon-k8s-cni-init:v1.11.3" # ★ap-northeast-1に変更 env: - name: DISABLE_TCP_EARLY_DEMUX value: "false" - name: ENABLE_IPv6 value: "false" securityContext: privileged: true volumeMounts: - mountPath: /host/opt/cni/bin name: cni-bin-dir terminationGracePeriodSeconds: 10 tolerations: - operator: Exists securityContext: {} containers: - name: aws-node image: "602401143452.dkr.ecr.ap-northeast-1.amazonaws.com/amazon-k8s-cni:v1.11.3" # ★ap-northeast-1に変更 ports: - containerPort: 61678 name: metrics livenessProbe: exec: command: - /app/grpc-health-probe - -addr=:50051 - -connect-timeout=5s - -rpc-timeout=5s initialDelaySeconds: 60 timeoutSeconds: 10 readinessProbe: exec: command: - /app/grpc-health-probe - -addr=:50051 - -connect-timeout=5s - -rpc-timeout=5s initialDelaySeconds: 1 timeoutSeconds: 10 env: - name: ADDITIONAL_ENI_TAGS value: "{}" - name: AWS_VPC_CNI_NODE_PORT_SUPPORT value: "true" - name: AWS_VPC_ENI_MTU value: "9001" - name: AWS_VPC_K8S_CNI_CONFIGURE_RPFILTER value: "false" - name: AWS_VPC_K8S_CNI_CUSTOM_NETWORK_CFG value: "false" - name: AWS_VPC_K8S_CNI_EXTERNALSNAT value: "false" - name: AWS_VPC_K8S_CNI_LOGLEVEL value: "DEBUG" - name: AWS_VPC_K8S_CNI_LOG_FILE value: "/host/var/log/aws-routed-eni/ipamd.log" - name: AWS_VPC_K8S_CNI_RANDOMIZESNAT value: "prng" - name: AWS_VPC_K8S_CNI_VETHPREFIX value: "eni" - name: AWS_VPC_K8S_PLUGIN_LOG_FILE value: "/var/log/aws-routed-eni/plugin.log" - name: AWS_VPC_K8S_PLUGIN_LOG_LEVEL value: "DEBUG" - name: DISABLE_INTROSPECTION value: "false" - name: DISABLE_METRICS value: "false" - name: DISABLE_NETWORK_RESOURCE_PROVISIONING value: "false" - name: ENABLE_IPv4 value: "true" - name: ENABLE_IPv6 value: "false" - name: ENABLE_POD_ENI value: "false" - name: ENABLE_PREFIX_DELEGATION value: "false" - name: WARM_ENI_TARGET value: "1" - name: WARM_PREFIX_TARGET value: "1" - name: MY_NODE_NAME valueFrom: fieldRef: fieldPath: spec.nodeName resources: requests: cpu: 25m securityContext: capabilities: add: - NET_ADMIN volumeMounts: - mountPath: /host/opt/cni/bin name: cni-bin-dir - mountPath: /host/etc/cni/net.d name: cni-net-dir - mountPath: /host/var/log/aws-routed-eni name: log-dir - mountPath: /var/run/cri.sock # ★ cri.sockに変更 name: containerd # ★ containerdに変更 - mountPath: /var/run/aws-node name: run-dir - mountPath: /run/xtables.lock name: xtables-lock volumes: - name: cni-bin-dir hostPath: path: /opt/cni/bin - name: cni-net-dir hostPath: path: /etc/cni/net.d - name: containerd # ★ containerdに変更 hostPath: path: /run/containerd/containerd.sock # ★ containerd.sockに変更 - name: log-dir hostPath: path: /var/log/aws-routed-eni type: DirectoryOrCreate - name: run-dir hostPath: path: /var/run/aws-node type: DirectoryOrCreate - name: xtables-lock hostPath: path: /run/xtables.lock affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/os operator: In values: - linux - key: kubernetes.io/arch operator: In values: - amd64 - arm64 - key: eks.amazonaws.com/compute-type operator: NotIn values: - fargate |
⑤K8Sにインストールします。
1 |
kubectl apply -f amazon-vpc-cni-k8s/config/master/aws-k8s-cni.yaml |
kubectlコマンドでポッドの状態を確認します。
1 |
kubectl get po -A |
※corednsがRunningになればインストール完了です。
K8SノードEC2を作成します。
AWSコンソールを使用して作業を行います。
①EC2のメニューでインスタンスを起動します。
②タグを設定します。
キー:Name、値:dev-k8s-node
キー:kubernetes.io/cluster/dev-k8s-cluster※各自クラスタ名に置き換えてください。、値:owned
③AMIはAmazon Linuxを設定します。
④インスタンスタイプとキーペアを設定します。
インスタンスタイプ:t3.small
キーペア名:dev-k8s-key
⑥ネットワークの設定します。
準備で作成した既存のセキュリティグループを選択します。
セキュリティグループ名:dev-k8s-security
⑦ストレージ、ロールを設定します。
ルートボリューム:8G※デフォルトのままです。
ロール名:dev-k8s-role
⑧EC2を作成します。
ノードEC2にK8Sのインストール
teraterm等のツールでK8SマスターEC2にログインして作業を行います。
①K8SマスターEC2のグローバルIP確認
AWSコンソールでEC2の一覧から「dev-k8s-node」の詳細を確認します。
②teratermでK8SマスターEC2にログインします。
IP:①で確認したグローバルIP
ユーザ名:ec2-user
鍵ファイル:上記で作成した「dev-k8s-key」
③EC2を最新の状態にアップデートします。
1 |
sudo yum update -y |
④ec2-net-utilsをアンインストールします。
後述のaws-k8s-cniプラグインを入れる時にec2-net-utilsが入っていると
挙動が不安定になるため、アンインストールします。
1 |
sudo yum remove ec2-net-utils -y |
⑤コンテナランタイムをインストールします。
ランタイムはcontainerdを使用します。
1 2 |
sudo amazon-linux-extras enable docker sudo yum install containerd -y |
containerdを自動起動するように設定します。
1 |
sudo sysemctl enable --now containerd |
ステータスを確認します。
1 |
sudo systemctl status containerd |
⑥OSパラメータを設定します。
1 2 3 4 5 6 7 8 9 10 11 12 |
cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf overlay br_netfilter EOF sudo modprobe overlay sudo modprobe br_netfilter cat <<EOF | sudo tee /etc/sysctl.d/99-containerd.conf net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 net.bridge.bridge-nf-call-ip6tables = 1 EOF sudo sysctl --system |
⑦containerdのconfig.tomlを設定します。
デフォルト設定を作成します。
1 2 |
sudo mkdir -p /etc/containerd sudo containerd config default | sudo tee /etc/containerd/config.toml |
config.tomlのパラメータを変更します。
1 |
sudo vi /etc/containerd/config.toml |
ファイル内容:config.yaml
1 2 3 4 |
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc] ... [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] SystemdCgroup = true # ★ここの値を変更します。 |
設定を反映します。
1 |
sudo systemctl restart containerd |
⑧kubeadmインストール時に警告が出るためtcモジュールを追加します。
1 |
sudo yum install -y tc |
⑨kubeadm, kubelet, kubectlをインストールします。
K8S用のリポジトリを追加します。
1 |
sudo vi /etc/yum.repos.d/kubernetes.repo |
ファイル内容:/etc/yum.repos.d/kubernetes.repo
1 2 3 4 5 6 7 8 |
[kubernetes] name=Kubernetes baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-\$basearch enabled=1 gpgcheck=1 repo_gpgcheck=0 gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg exclude=kubelet kubeadm kubectl |
インストールします。
※今回はバージョン1.23をインストールします。
1 |
sudo yum install kubelet-1.23.7-0 kubectl-1.23.7-0 kubeadm-1.23.7-0 --disableexcludes=kubernetes -y |
kubeletを自動起動するように設定します。
1 |
sudo systemctl enable --now kubelet |
ステータスを確認します。
ここではK8Sの構築が完了していないため、停止状態となっています。
1 |
sudo systemctl status kubelet |
⑩kubeadmを使用してK8SマスターEC2に紐づけます。
マスターEC2にK8Sをインストールした時に表示されたコマンドを使用します。
sudoを付けてで実行する事と「–cri-socket=/run/containerd/containerd.sock」のオプションを追加します。
1 2 3 |
sudo kubeadm join ip-172-31-21-87.ap-northeast-1.compute.internal:6443 --token 6q1g4f.4m1dibndp5h0o5sn \ --discovery-token-ca-cert-hash sha256:cd753371f8fbd3802377ba35809648647a5e6295e09f2de6fb3e00f387fbeddc \ --cri-socket=/run/containerd/containerd.sock |
K8SマスターEC2で状態を確認します。
K8SマスターEC2にSSHログインし、kubectlコマンドでノードの状態を確認します。
1 |
kubectl get node |
STATUSが「Ready」になっていれば正常です。
サンプルnginxをデプロイします。
①nginxのyamlファイルを作成します。
ファイル内容:nginx.yaml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
apiVersion: apps/v1 kind: Deployment metadata: name: nginx spec: selector: matchLabels: app: nginx replicas: 1 template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.23.2 ports: - containerPort: 80 --- apiVersion: v1 kind: Service metadata: labels: app: nginx name: nginx spec: type: NodePort selector: app: nginx ports: - port: 80 |
②nginxをデプロイします。
1 |
kubectl apply -f nginx.yaml |
③nginxのデプロイを確認します。
1 |
kubectl get po |
STATUSが「Runnin」になっていれば正常です。
④サービスのノードポートを確認します。
1 |
kubectl get svc |
PORTで「80:30366」となっているところを確認します。
ノードポートは「30366」となります。
⑤外部からアクセスできるようにセキュリティグループを変更します。
AWSコンソールにログインして作業を行います。
対象セキュリティグループ:dev-k8s-security
インバンドルールに以下を追加します。
タイプ:カスタムTCP
ポート範囲:30366※上記で確認したノードポートになります。
ソース:マイIP※検証用なのでマイIPとしています。公開する場合は「0.0.0.0/0」等を入力することで公開可能です。
⑥ブラウザでnginxにアクセスします。
URL:http://K8SノードEC2のパブリックIP:30366※上記で確認したノードポートになります。
nginxのページが表示されれば正常です。
以上。
【エンジニア募集中】フルリモートも◎(リモート率85.7%)、平均残業8時間、年休124日以上、有給取得率90% etc. 詳細はこちらから>