- 4-0-1. AWS LB / ExternalDNS / EBS, kube-ops-view 설치2024년 03월 30일
- yeongki0944
- 작성자
- 2024.03.30.:19
0. 준비사항
도메인 구입
[aws] Amazon Route 53을 사용해 도메인 이름을 등록하는 방법
1. ACM 발급
아래 블로그 참고
[tistory] AWS의 Certificate Manager 로 SSL 인증서 발급 받기
2. ExternalDNS 설치
# ExternalDNS MyDomain=myeks.net echo "export MyDomain=myeks.net" >> /etc/profile
MyDnzHostedZoneId=$(aws route53 list-hosted-zones-by-name --dns-name "${MyDomain}." --query "HostedZones[0].Id" --output text) echo $MyDomain, $MyDnzHostedZoneId
curl -s -O https://raw.githubusercontent.com/gasida/PKOS/main/aews/externaldns.yaml MyDomain=$MyDomain MyDnzHostedZoneId=$MyDnzHostedZoneId envsubst < externaldns.yaml | kubectl apply -f -
* gasida/PKOS/main/aews/externaldns.yaml 분석
apiVersion: v1 kind: ServiceAccount metadata: name: external-dns namespace: kube-system labels: app.kubernetes.io/name: external-dns --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: external-dns labels: app.kubernetes.io/name: external-dns rules: - apiGroups: [""] resources: ["services","endpoints","pods","nodes"] verbs: ["get","watch","list"] - apiGroups: ["extensions","networking.k8s.io"] resources: ["ingresses"] verbs: ["get","watch","list"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: external-dns-viewer labels: app.kubernetes.io/name: external-dns roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: external-dns subjects: - kind: ServiceAccount name: external-dns namespace: kube-system # change to desired namespace: externaldns, kube-addons --- apiVersion: apps/v1 kind: Deployment metadata: name: external-dns namespace: kube-system labels: app.kubernetes.io/name: external-dns spec: strategy: type: Recreate selector: matchLabels: app.kubernetes.io/name: external-dns template: metadata: labels: app.kubernetes.io/name: external-dns spec: serviceAccountName: external-dns containers: - name: external-dns image: registry.k8s.io/external-dns/external-dns:v0.14.0 args: - --source=service - --source=ingress - --domain-filter=${MyDomain} # will make ExternalDNS see only the hosted zones matching provided domain, omit to process all available hosted zones - --provider=aws #- --policy=upsert-only # would prevent ExternalDNS from deleting any records, omit to enable full synchronization - --aws-zone-type=public # only look at public hosted zones (valid values are public, private or no value for both) - --registry=txt - --txt-owner-id=${MyDnzHostedZoneId} env: - name: AWS_DEFAULT_REGION value: ap-northeast-2 # change to region where EKS is installed
- ServiceAccount:
- name: external-dns
- namespace: kube-system
- labels: app.kubernetes.io/name: external-dns
- ClusterRole:
- name: external-dns
- labels: app.kubernetes.io/name: external-dns
- rules: 다음과 같은 Kubernetes 리소스 및 API 그룹에 대한 액세스 권한을 정의합니다.
- 서비스, 엔드포인트, 파드, 노드에 대한 get, watch, list 권한
- 인그레스에 대한 get, watch, list 권한
- ClusterRoleBinding:
- name: external-dns-viewer
- labels: app.kubernetes.io/name: external-dns
- roleRef: external-dns ClusterRole에 대한 참조를 제공합니다.
- subjects: external-dns ServiceAccount에 대한 정보를 제공하여 해당 권한을 부여합니다.
- Deployment:
- name: external-dns
- namespace: kube-system
- labels: app.kubernetes.io/name: external-dns
- spec: 배포 구성을 정의합니다.
- serviceAccountName: external-dns ServiceAccount를 지정합니다.
- containers: ExternalDNS 컨테이너를 정의합니다.
- image: ExternalDNS 컨테이너의 이미지를 지정합니다.
- args: ExternalDNS 실행을 위한 명령행 인수를 설정합니다.
- -source: ExternalDNS에서 동작할 소스를 정의합니다. 여기서는 서비스 및 인그레스를 감지하도록 지정되어 있습니다.
- -domain-filter: 처리할 호스팅된 존을 제한하기 위해 도메인 필터를 설정합니다.
- -provider: 외부 DNS 서비스 제공업체를 설정합니다. 여기서는 AWS를 사용합니다.
- -aws-zone-type: AWS 호스팅된 존의 유형을 설정합니다. 여기서는 공용 호스팅된 존만을 대상으로 설정됩니다.
- -registry: 레코드를 등록할 레지스트리 유형을 설정합니다. 여기서는 TXT 레코드를 사용합니다.
- -txt-owner-id: TXT 레코드를 등록하는 데 사용할 Zone ID를 설정합니다.
- env: ExternalDNS 컨테이너에서 사용할 환경 변수를 설정합니다.
- AWS_DEFAULT_REGION: AWS 리전을 설정합니다.
3. kube-ops-view
# kube-ops-view helm repo add geek-cookbook https://geek-cookbook.github.io/charts/ helm install kube-ops-view geek-cookbook/kube-ops-view --version 1.2.2 --set env.TZ="Asia/Seoul" --namespace kube-system kubectl patch svc -n kube-system kube-ops-view -p '{"spec":{"type":"LoadBalancer"}}' kubectl annotate service kube-ops-view -n kube-system "external-dns.alpha.kubernetes.io/hostname=kubeopsview.$MyDomain" echo -e "Kube Ops View URL = http://kubeopsview.$MyDomain:8080/#scale=1.5"
4. AWS LB Controller
# AWS LB Controller helm repo add eks https://aws.github.io/eks-charts helm repo update helm install aws-load-balancer-controller eks/aws-load-balancer-controller -n kube-system --set clusterName=$CLUSTER_NAME \ --set serviceAccount.create=false --set serviceAccount.name=aws-load-balancer-controller
5. EBS CSI driver 설치
# EBS csi driver 설치 확인 eksctl get addon --cluster ${CLUSTER_NAME} kubectl get pod -n kube-system -l 'app in (ebs-csi-controller,ebs-csi-node)' kubectl get csinodes
6. gp3 스토리지 클래스 생성
# gp3 스토리지 클래스 생성 kubectl get sc kubectl apply -f https://raw.githubusercontent.com/gasida/PKOS/main/aews/gp3-sc.yaml kubectl get sc
7. 설치 정보 확인
# 이미지 정보 확인 kubectl get pods --all-namespaces -o jsonpath="{.items[*].spec.containers[*].image}" | tr -s '[[:space:]]' '\n' | sort | uniq -c # eksctl 설치/업데이트 addon 확인 eksctl get addon --cluster $CLUSTER_NAME # IRSA 확인 eksctl get iamserviceaccount --cluster $CLUSTER_NAME # EC2 Instance Profile에 IAM Role 정보 확인 cat myeks.yaml | grep managedNodeGroups -A20 | yh managedNodeGroups: - amiFamily: AmazonLinux2 desiredCapacity: 3 disableIMDSv1: true disablePodIMDS: false iam: withAddonPolicies: albIngress: false appMesh: false appMeshPreview: false autoScaler: false awsLoadBalancerController: false >> IRSA 사용 certManager: true cloudWatch: true ebs: true efs: false externalDNS: true fsx: false imageBuilder: true xRay: true
다음글이전글이전 글이 없습니다.댓글
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)