에서 개발 운영 엔지니어로이 튜토리얼에서는, 나는 내 경험을 공유 Cloudify.co은 , 이것이입니다 네 번째 포스트 의 튜토리얼 나는 EKS 우리가에서 만든 클러스터에 Nginx에 침투이고 cert-관리자를 추가하는 방법을 설명합니다있는 이전 게시물 .
미래 게시 게시물 의 CI / CD 구축 :
Ingress 는 클러스터 외부의 HTTP 및 HTTPS 경로를 클러스터 내의 서비스에 노출 합니다. 트래픽 라우팅은 Ingress 리소스에 정의 된 규칙에 의해 제어됩니다.
internet
|
[ Ingress ]
--|-----|--
[ Services ]
인 그레스는 서비스에 외부 적으로 연결 가능한 URL, 부하 분산 트래픽, SSL / TLS 종료 및 이름 기반 가상 호스팅을 제공하도록 구성 될 수 있습니다. 인 그레스 컨트롤러 는 일반적으로로드 밸런서를 사용하여 인 그레스를 수행 할 책임이 있지만 트래픽 처리를 돕기 위해 에지 라우터 또는 추가 프런트 엔드를 구성 할 수도 있습니다.
https://kubernetes.io/docs/concepts/services-networking/ingress/
ingress-nginx는 NGINX 를 역방향 프록시 및로드 밸런서로 사용하는 Kubernetes 용 Ingress 컨트롤러입니다 .
https://github.com/kubernetes/ingress-nginx
Nginx Ingress를 설치하기 위해 Helm 패키지 관리자를 사용합니다.
Helm 은 Kubernetes 용 패키지 관리자로 개발자와 운영자가 애플리케이션과 서비스를 Kubernetes 클러스터에보다 쉽게 패키징, 구성 및 배포 할 수 있습니다.
Helm을 설치하려면 다음 참조 를 따르십시오 . homebrew를 사용하여 Mac에 Helm을 설치했습니다.
$ brew install helm
$ helm repo add stable https://kubernetes-charts.storage.googleapis.com/
helm을 사용하여 ingress-nginx를 설치할 'ingress-nginx'네임 스페이스를 만들어 보겠습니다.
$ kubectl create ns ingress-nginx
$ helm install ingress-nginx stable/nginx-ingress -n ingress-nginx
생성 된 LB의 DNS 이름 : a5875a2383094446f952d4ac79051bc7–1133495909.us-east-1.elb.amazonaws.com
도메인이 cicd-future.com이라고 가정 해 보겠습니다.
EKS 클러스터의 도메인은 eks.cicd-future.com입니다.
LoadBalancer 서비스 생성을 가리키는 A 레코드 * .eks.cicd-future.com을 추가해야합니다. 기본적으로 Ingress에서 LB를 생성했음을 가리키는 별칭입니다.
AWS의 route53을 사용하는 경우 Route53-> Hosted Zones-> 'cicd-future.com'으로 이동하여 생성 된 LB를 가리키는 새 A 레코드를 추가합니다.
A 레코드를 올바르게 정의했는지 확인하려면 'dig'를 사용하십시오.
$ dig eks.cicd-future.com
$ curl eks.cicd-future.com
default backend - 404%
올바르게 구성된 모든 것을 테스트하기 위해 수신 규칙이있는 간단한 Nginx 서버를 배포합니다.
$ kubectl run nginx --image nginx
$ kubectl expose deploy nginx --port 80
# Save as ingress-nginx.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: nginx-test
annotations:
kubernetes.io/ingress.class: "nginx"
spec:
rules:
- host: test.eks.cicd-future.com
http:
paths:
- path: /
backend:
serviceName: nginx
servicePort: 80
# Deploy ingress rule
$ kubectl create -f ingress-nginx.yaml
$ curl test.eks.cicd-future.com
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
cert-manager는 기본 Kubernetes 인증서 관리 컨트롤러입니다. Let 's Encrypt , HashiCorp Vault , Venafi , 간단한 서명 키 쌍 또는 자체 서명 과 같은 다양한 소스에서 인증서를 발급하는 데 도움이 될 수 있습니다 .
인증서가 유효하고 최신 상태인지 확인하고 만료되기 전에 구성된 시간에 인증서 갱신을 시도합니다.
https://cert-manager.io/docs/installation/kubernetes/
네임 스페이스 생성, helm 저장소 추가 및 cert-manager 설치
# Create cert-manager namespace
$ kubectl create namespace cert-manager
# Add the Jetstack Helm repository
$ helm repo add jetstack https://charts.jetstack.io
# Update your local Helm chart repository cache
$ helm repo update
# Install needed CRDs
$ kubectl apply --validate=false -f https://raw.githubusercontent.com/jetstack/cert-manager/release-0.14/deploy/manifests/00-crds.yaml
# Install using helm v3+
$ helm install \
cert-manager jetstack/cert-manager \
--namespace cert-manager \
--version v0.14
$ kubectl get pods --namespace cert-manager
NAME READY STATUS RESTARTS AGE
cert-manager-5c6866597-zw7kh 1/1 Running 0 2m
cert-manager-cainjector-577f6d9fd7-tr77l 1/1 Running 0 2m
cert-manager-webhook-787858fcdb-nlzsq 1/1 Running 0
Let 's Encrypt 인증서를 얻으려면 발급자를 생성해야합니다. 발급자 또는 ClusterIssuer 일 수 있습니다. 차이점은 발급자 가 단일 네임 스페이스로 범위가 지정되고 ClusterIssuer가 발급자 의 클러스터 전체 버전이라는 점입니다 .
Let 's Encrypt Issuer에는 스테이징 및 프로덕션 환경이 있으며 테스트를위한 스테이징 발급자부터 시작할 수 있으며 테스트에 더 적합한 (확장 된) 속도 제한이 있지만이 자습서에서는 프로덕션 ClusterIssuer 생성에 집중할 것입니다.
apiVersion: cert-manager.io/v1alpha3
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: admin@eks.cicd-future.com
# 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
clusterissuer.yaml 배포
kubectl create -f clusterissuer.yaml
새 인증서를 발급하기 위해 'nginx'서버에 대한 수신 규칙을 수정하고 '주석'및 'tls'부분에주의합니다.
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: nginx-test
annotations:
kubernetes.io/ingress.class: "nginx"
cert-manager.io/cluster-issuer: "letsencrypt-prod"
spec:
tls:
- hosts:
- test.eks.cicd-future.com
secretName: test-tls-prod
rules:
- host: test.eks.cicd-future.com
http:
paths:
- path: /
backend:
serviceName: nginx
servicePort: 80
kubectl create -f my-ingress.yaml
'kubectl'을 사용하여 획득 한 인증서 및 상태를 확인할 수 있습니다.
$ kubectl get certificates -n cert-manager
이 게시물에서는 EKS 클러스터 용 NGINX Ingress를 설치 및 구성하는 방법, EKS 클러스터를 가리키는 route53을 사용하여 DNS 레코드를 생성하는 방법, ClusterIssuer 및 Let 's Encrypt 인증서를 사용하여 Cert-Manager를 설치 및 구성하는 방법을 설명했습니다.
읽어 주셔서 감사합니다. 즐거웠기를 바랍니다. 다음 게시물에서 뵙겠습니다.
이 튜토리얼의 다음 게시물이 게시 될 때 알림을 받고 싶다면 여기 미디엄과 트위터 (@warolv) 에서 저를 팔로우하세요 .
이 자습서를 복제 할 개인 블로그 : http://igorzhivilo.com ,이 자습서에서 만든 모든 구성을 Github (warolv)에 저장 합니다.
https:///@warolv/build-ci-cd-of-the-future-with-kubernetes-aws-eks-and-jenkins-84b744f26949
https://kubernetes.io/docs/concepts/services-networking/ingress/
Telepresence 2는 최근에 출시되었으며 (Telepresence 1과 같이) Kubernetes 도구 상자에 추가 할 가치가 있습니다. Telepresence는 일상적인 작업 흐름이 어떻게 개선되는지 발견 한 후에는 살 수없는 도구 중 하나입니다.
소개 애플리케이션 팀이 고객 대면 애플리케이션의 새 버전을 배포하고 출시 할 준비가 된 시나리오를 그려보십시오. 개발자는 엄격한 테스트를 수행했지만 애플리케이션이 프로덕션에 도달하면 클라이언트는 의도 한대로 서비스를 사용하지 못하게하는 잡히지 않은 버그에 부딪 힙니다.