t3 패밀리 인스턴스는 불가능
위 링크에서 IsTrunkingCompatible: true 인 인스턴스 타입만 사용 가능함
ENV
EKS_CLUSTER_NAME="<EKS_CLUSTER_NAME>"
EKS_CLUSTER_ROLE=$(aws eks describe-cluster --name $EKS_CLUSTER_NAME --query cluster.roleArn --output text | cut -d / -f 2)
Shell
복사
IAM 역할에 정책 연결
aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/AmazonEKSVPCResourceController --role-name $EKS_CLUSTER_ROLE
Shell
복사
Demonset 확인
kubectl describe daemonset aws-node --namespace kube-system | grep amazon-k8s-cni: | cut -d : -f 3
Shell
복사
ENV Demonset
kubectl set env daemonset aws-node -n kube-system ENABLE_POD_ENI=true
kubectl rollout restart daemonset aws-node -n kube-system
Shell
복사
kubectl -n kube-system patch ds aws-node \
-p '{"spec":{"template":{"spec":{"initContainers":[{"env":[{"name":"DISABLE_TCP_EARLY_DEMUX","value":"true"}],"name":"aws-vpc-cni-init"}],"containers":[{"env":[{"name":"ENABLE_POD_ENI","value":"true"}],"name":"aws-node"}]}}}}'
kubectl -n kube-system rollout status ds aws-node
Shell
복사
노드그룹 확인
kubectl get nodes -o wide -l vpc.amazonaws.com/has-trunk-attached=true
kubectl describe daemonset aws-node -n kube-system | grep ENABLE_POD_ENI
# 첫번째 명령어를 해서 노드가 출력이 되지 않았지만 두번째 명령문이 출력된 경우 수동으로 레이블을 지정
kubectl label nodes <노드 이름> vpc.amazonaws.com/has-trunk-attached=true
kubectl describe no <node> | grep vpc.amazonaws.com/pod-eni
Shell
복사
보안그룹 생성
export VPC_ID=$(aws ec2 describe-vpcs --query "Vpcs[].VpcId[]" --output text)
aws ec2 create-security-group --group-name <SG Name> --description <SG Name> --vpc-id $VPC_ID
aws ec2 authorize-security-group-ingress --group-id <sg-id> --protocol icmp --port -1 --cidr 0.0.0.0/0
aws ec2 authorize-security-group-egress --group-id <sg-id> --protocol icmp --port -1 --cidr 0.0.0.0/0
Shell
복사
•
podsgp.yaml
apiVersion: vpcresources.k8s.aws/v1beta1
kind: SecurityGroupPolicy
metadata:
name: skills-sgp
namespace: default
spec:
podSelector:
matchLabels:
app: skills-app
securityGroups:
groupIds:
- sg-0b1873134f13b34cb # Security Group ID
YAML
복사
kubectl apply -f podsgp.yaml
Shell
복사
kubectl get sgp -n <Namespace>
Shell
복사
kubectl get po -n <Namespace> -o wide
Shell
복사
•
deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: skills-deployment
namespace: default
spec:
replicas: 2
selector:
matchLabels:
app: skills-app
template:
metadata:
labels:
app: skills-app
spec:
nodeSelector:
eks.amazonaws.com/nodegroup: skills-app-nodegroup
containers:
- name: skills-app
image: 362708816803.dkr.ecr.ap-northeast-2.amazonaws.com/skills-app
ports:
- containerPort: 8080
YAML
복사
kubectl apply -f deployment.yaml
Shell
복사
•
service.yaml
apiVersion: v1
kind: Service
metadata:
name: skills-svc
namespace: default
spec:
selector:
app: skills-app
type: NodePort
ports:
- name: skills-svc
protocol: TCP
port: 8080
targetPort: 8080
YAML
복사
kubectl apply -f service.yaml
Shell
복사
•
ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: skills-ingress
namespace: default
annotations:
kubernetes.io/ingress.class: alb
alb.ingress.kubernetes.io/load-balancer-name: skills-alb
alb.ingress.kubernetes.io/scheme: internet-facing
alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}]'
alb.ingress.kubernetes.io/target-type: instance
alb.ingress.kubernetes.io/subnets: subnet-0cfd1eb9a2584ae76, subnet-0b155c4433eb23024
alb.ingress.kubernetes.io/healthcheck-path: /healthz
spec:
ingressClassName: alb
rules:
- http:
paths:
- path: /healthz
pathType: Prefix
backend:
service:
name: skills-svc
port:
number: 8080
- path: /v1/dummy
pathType: Prefix
backend:
service:
name: skills-svc
port:
number: 8080
YAML
복사
kubectl apply -f ingress.yaml
Shell
복사


