파드를 노출시키는 부분은 Service이기 때문에 service.yaml을 수정하도록 하겠습니다.
service.yaml을 다음과 같이 수정 배포하도록 하겠습니다.
apiVersion: v1
kind: Service
metadata:
name: cb-test-api
namespace: prd-api
spec:
ports:
- port: 80
targetPort: 9000
protocol: TCP
type: LoadBalancer
selector:
app: cb-test-api
혹은 아래와 같은 명령어를 주셔서 바꿀 수도 있습니다.
kubectl patch svc cb-test-api -n prd-api -p '{"spec": {"type": "LoadBalancer"}}'
수정한 후 아래와 같이 CLB가 하나 생성되며, 이를 통해 서비스를 확인할 수 있습니다.
자, 이제 그럼 기존에 가지고 있는 ACM 및 Route53을 활용하여서 443 port 및 DNS 매핑을 해보도록 하겠습니다.
먼저 Route53에 매핑시켜줄 수 있는 External DNS에 대한 배포를 해보겠습니다.
apiVersion: v1
kind: ServiceAccount
metadata:
name: external-dns
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
name: external-dns
rules:
- apiGroups: [""]
resources: ["services"]
verbs: ["get","watch","list"]
- apiGroups: [""]
resources: ["pods"]
verbs: ["get","watch","list"]
- apiGroups: ["extensions"]
resources: ["ingresses"]
verbs: ["get","watch","list"]
- apiGroups: [""]
resources: ["nodes"]
verbs: ["list"]
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: external-dns-viewer
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: external-dns
subjects:
- kind: ServiceAccount
name: external-dns
namespace: default
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: external-dns
spec:
strategy:
type: Recreate
template:
metadata:
labels:
app: external-dns
spec:
serviceAccountName: external-dns
containers:
- name: external-dns
image: registry.opensource.zalan.do/teapot/external-dns:v0.5.9
args:
- --source=service
- --source=ingress
- --domain-filter=hyeonho.shop # 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=ZOV2K8TSX4LYX
수행 후 하나의 터미널에서 계속해서 모니터링을 해주도록 하겠습니다.
kubectl logs -f deployments.app/external-dns
이제 Service.yaml을 아래와 같이 수정해주시기 바랍니다.
apiVersion: v1
kind: Service
metadata:
name: cb-test-api
namespace: prd-api
annotations:
service.beta.kubernetes.io/aws-load-balancer-ssl-cert: arn:aws:acm:ap-northeast-2:{account-number}:certificate/{id}
external-dns.alpha.kubernetes.io/hostname: {domain}
service.beta.kubernetes.io/aws-load-balancer-backend-protocol: http
service.beta.kubernetes.io/aws-load-balancer-ssl-ports: https
spec:
ports:
- name: http
port: 80
targetPort: 9000
protocol: TCP
- name: https
port: 443
targetPort: 9000
protocol: TCP
type: LoadBalancer
selector:
app: cb-test-api
혹은 아래와 같은 명령어를 수행하셔도 됩니다.
kubectl annotate -n prd-api svc cb-test-api service.beta.kubernetes.io/aws-load-balancer-ssl-cert={acm-arn}
kubectl annotate -n prd-api svc cb-test-api external-dns.alpha.kubernetes.io/hostname={domain}
kubectl annotate -n prd-api svc cb-test-api service.beta.kubernetes.io/aws-load-balancer-backend-protocol=http
kubectl annotate -n prd-api svc cb-test-api service.beta.kubernetes.io/aws-load-balancer-ssl-ports=https
서비스를 다시 배포 후 아래와 같은 로그가 뜨면 성공적으로 Route53을 업데이트한 것입니다.
Route53 Record에 아래와 같이 등록된 것을 볼 수 있습니다.
CLB에서도 정상적으로 세팅된 것을 보실 수 있습니다.
HTTPS로의 접근도 정상적으로 수행되는 것을 볼 수 있습니다.
EKS에서 CLB를 이용하여 서비스를 구성해봤습니다.
다음 포스트에서는 ALB를 사용해보도록 하겠습니다.
'EKS > LoadBalancer & EXT DNS' 카테고리의 다른 글
EKS LoadBalancer - 4. Nginx Ingress (NLB) (0) | 2020.10.12 |
---|---|
EKS LoadBalancer - 3. Network LoadBalancer (0) | 2020.02.05 |
EKS LoadBalancer - 2. Application LoadBalancer (0) | 2020.02.04 |