2023. 9. 4. 20:28ㆍDevOps/Kubernetes
사전에 EKS가 구성되어 있어야 합니다.
subnet: public private 모두 필요합니다.
클러스터(마스터와 워커노드 모두 private subnet에 위치)
Public Subnet에서 Private Subnet으로 연결이 가능한 NAT Gateway가 필요합니다.
1. nginx-ingress for aws 다운로드
wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/aws/deploy.yaml
2. manifest 코드 수정 후 nginx-ingress 컨트롤러 생성
해당 deploy.yaml 파일을 바로 적용하게 되면 기본적으로 private subnet에 NLB가 위치하기 되어 외부에서 접속할 수 없기 때문에 아래 3줄을 annotation에 추가해주고 apply
참고 | https://repost.aws/knowledge-center/eks-access-kubernetes-services
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/aws-load-balancer-backend-protocol: tcp
service.beta.kubernetes.io/aws-load-balancer-cross-zone-load-balancing-enabled: "true"
service.beta.kubernetes.io/aws-load-balancer-type: nlb
<아래 3줄을 추가>
service.beta.kubernetes.io/aws-load-balancer-type: "external"
service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: "instance"
service.beta.kubernetes.io/aws-load-balancer-scheme: "internet-facing"
service 부분에 자동으로 NLB의 도메인이 등록된 것을 확인
3. NLB 도메인을 입력하여 NginX 페이지 확인
kubectl get svc -n ingreess-nginx
Output:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ingress-nginx-controller LoadBalancer 172.20.238.111 k8s-ingressn-ingressn-242a3145de-340c6f18e41a71ea.elb.ap-northeast-2.amazonaws.com 80:30365/TCP,443:32293/TCP 17m
ingress-nginx-controller-admission ClusterIP 172.20.84.112 <none> 443/TCP 17m
위 명령어로 나온 ingres-nginx의 EXTERNAL-IP가 <pending>에서 NLB의 DNS 주소로 바뀌게 되면
해당 주소로 접속해서 NginX 페이지가 정상적으로 뜨는지 확인할 수 있습니다.
4. Route53에서 발급받은 도메인을 이용하여 NLB를 연결
5. Service / Deployment(Pod) 배포
애플리케이션 이미지를 통해 Pod를 실행시키고 Service를 묶습니다.
이부분은 생략하겠습니다.
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.12.0/cert-manager.yaml
Let’s Encrypt에서는 Staging 버전과 Production 환경이 있습니다.
Staging 버전은 Selfsigned 인증서와 마찬가지로 브라우저에서 신뢰할 수 없다고 표시가 됩니다.
반대로, Prod 버전은 브라우저에서 신뢰가 가능하도록 발급할 수 있습니다.
spec.acme.server의 주소만 바꿔주면 쉽게 변경이 가능합니다.
추가적으로, 안내받을 이메일도 본인의 이메일로 바꿔주면 됩니다.
아래 manifest 코드에 본인 이메일을 추가작성하여 kubectl apply 해주시면 됩니다.
vim clusterissuer.yaml
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: letsencrypt-staging
spec:
acme:
# The ACME server URL
server: https://acme-staging-v02.api.letsencrypt.org/directory
# Email address used for ACME registration
email: [자신의 이메일 주소를 기재]
# Name of a secret used to store the ACME account private key
privateKeySecretRef:
name: letsencrypt-staging
# Enable the HTTP-01 challenge provider
solvers:
# An empty 'selector' means that this solver matches all domains
- selector: {}
http01:
ingress:
class: nginx
---
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: letsencrypt-prod
spec:
acme:
# The ACME server URL
server: https://acme-v02.api.letsencrypt.org/directory
# Email address used for ACME registration
email: [자신의 이메일 주소를 기재]
# Name of a secret used to store the ACME account private key
privateKeySecretRef:
name: letsencrypt-prod
# Enable the HTTP-01 challenge provider
solvers:
- http01:
ingress:
class: nginx
Manifest Code 적용
8. Ingress 생성 - Certificate(Secret) 확인
아래는 sample Ingress Manifest Code입니다.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: app-ingress
annotations:
ingress.kubernetes.io/ssl-redirect: "true"
kubernetes.io/ingress.class: nginx
kubernetes.io/tls-acme: "true"
nginx.ingress.kubernetes.io/ssl-passthrough: "true"
cert-manager.io/cluster-issuer: letsencrypt-prod # prod 버전으로 생성
spec:
tls:
- hosts:
- www.도메인.com # 인증서를 적용할 도메인으로 변경
secretName: app-certificate # 인증서 key가 저장되는 secret
rules:
- host: www.devycha.com # 인증서를 적용할 도메인으로 변경
http:
paths:
- path: /users
pathType: Prefix
backend:
service:
name: user-service
port:
number: 8080
위에서 설정한 secretName인 app-certificate에 대한 secret 정보가 생성된 것을 확인
Ingress와 연결된 로드밸런서 주소와 서비스와 연결된 path로 접속하여 Certification 확인
'DevOps > Kubernetes' 카테고리의 다른 글
Nginx Ingress인가 Ingress Nginx인가 (0) | 2023.10.30 |
---|---|
Rocky Linux RKE2 Intsall (1) | 2023.10.23 |
[Kubernetes] CSI(Container Storage Interface) (0) | 2023.09.13 |
[CKA] 2023 CKA(Certified Kubernetes Administrator) 합격 후기 (0) | 2023.09.05 |
온프레미스 환경에서의 Kubernetes 클러스터 구축 (0) | 2023.09.04 |