여러 시스템으로nginx-ingress/kube-lego 구축
7424 단어 kube-legokubernetes
슬프게도 이 기사를 쓸 때(2018/02/08) 쿠베레고는 이미 DEPRECATED 상태에 있었다.
kube-lego is in maintenance mode only. There is no plan to support any new features. The latest Kubernetes release that kube-lego officially supports is 1.8. The officially endorsed successor is cert-manager .
Kubernetes1.8만 공식적으로 지원하며cert-manager에 의해 계승됩니다.
1.9 발표, 마침 오늘 GKE도 모든 영역 1.9 지원 완료
그래서 자신이 이 구조에서 운용하지 않고 끝냈지만 완성한 필기였다.
기본적으로 Helm을 사용합니다.
하고 싶은 일
사용NGINX Ingress Controller
각 입구에서 이 컨트롤러의 서비스(type:LoadBalancer)를 공유하고 GKE에서 TCP LoadBalancer를 공유하면 IP도 같다.
(이로 인한 나쁜 점이 얼마나 큰지 모르겠다)
이러한 상황을 방지하기 위해 여러 개의 NGINX Ingress Controller를 배포하는 방법
그때 고전했던 쿠베레고 측의 설정 노트.
환경
사용NGINX Ingress Controller
각 입구에서 이 컨트롤러의 서비스(type:LoadBalancer)를 공유하고 GKE에서 TCP LoadBalancer를 공유하면 IP도 같다.
(이로 인한 나쁜 점이 얼마나 큰지 모르겠다)
이러한 상황을 방지하기 위해 여러 개의 NGINX Ingress Controller를 배포하는 방법
그때 고전했던 쿠베레고 측의 설정 노트.
환경
프로비저닝
NGINX Ingress Controller
ingress-nginx
kube-lego
kube-lego
일반 시스템
nginx-ingress
/kube-lego
기타 시스템 (회사 내부용 시스템 이미지)
nginx-ingress-inhouse
/kube-lego-inhouse
단계
(helm의 설정 절차를 생략)
namespace 만들기
# ingress-nginx
curl https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/namespace.yaml \
| kubectl apply -f -
# kube-lego
curl https://raw.githubusercontent.com/jetstack/kube-lego/master/examples/nginx/lego/00-namespace.yaml \
| kubectl apply -f -
꼭 필요한 것은 아니지만 공식 명칭을 기준으로 한다.
nginx-ingress 설정
helm install stable/nginx-ingress \
--name nginx-ingress \
--namespace ingress-nginx \
--set controller.replicaCount=2
replicaCount
는 임의의 것이다.
nginx-ingress-inhouse 설정
helm install stable/nginx-ingress \
--name nginx-ingress-inhouse \
--namespace ingress-nginx \
--set controller.ingressClass=nginx-inhouse \
--set controller.replicaCount=2
ingressClass
를 기본 nginx
별칭으로 지정합니다.
kube-lego 설정
helm install stable/kube-lego \
--name kube-lego \
--namespace kube-lego \
--set image.tag=master-3418 \
--set config.LEGO_LOG_LEVEL=debug \
--set [email protected] \
--set config.LEGO_URL=https://acme-v01.api.letsencrypt.org/directory
LEGO_LOG_LEVEL
는 임의의 것이다.LEGO_EMAIL
자신의 것으로 변경해야 한다.LEGO_URL
우선 지정하지 않은 상황에서 설정(staging용api가 됨)을 검증한 다음에 생산용api에서 구축한다.image.tag=master-3418
후술.
kube-legoin house 설정
helm install stable/kube-lego \
--name kube-lego-inhouse \
--namespace kube-lego \
--set nameOverride=kube-lego-inhouse \
--set image.tag=master-3418 \
--set config.LEGO_LOG_LEVEL=debug \
--set [email protected] \
--set config.LEGO_URL=https://acme-v01.api.letsencrypt.org/directory \
--set config.LEGO_SUPPORTED_INGRESS_CLASS=nginx-inhouse \
--set config.LEGO_DEFAULT_INGRESS_CLASS=nginx-inhouse \
--set config.LEGO_DEFAULT_INGRESS_PROVIDER=nginx \
--set config.LEGO_SECRET_NAME=kube-lego-inhouse-account \
--set config.LEGO_SERVICE_NAME_NGINX=kube-lego-inhouse-nginx \
--set config.LEGO_INGRESS_NAME_NGINX=kube-lego-inhouse-nginx
--set config.LEGO_SERVICE_SELECTOR=kube-lego-inhouse \
LEGO_SUPPORTED_INGRESS_CLASS
에서 nginx-inhouse
ingressclass를 대상으로 변경합니다.LEGO_DEFAULT_INGRESS_CLASS
,LEGO_DEFAULT_INGRESS_PROVIDER
kube-lego가 ACME에 도전하는 경로로 생성된ingress의kubernetes.io/ingress.class
,kubernetes.io/ingress.provider
annotation의 값입니다.LEGO_SECRET_NAME
,LEGO_SERVICE_NAME_NGINX
,LEGO_INGRESS_NAME_NGINX
는kube-lego가 생성한 자원의 이름이 주 시스템과 중복되지 않도록 설정한 것이다.LEGO_SERVICE_SELECTOR
도 주 시스템과 분리하여 설정한다.
고전에 빠진 것은 이 중 LEGO_DEFAULT_INGRESS_PROVIDER
등 항목은helm 기본 참조인jetstack/kube-lego:0.1.5 이미지에서 대응하지 못했다는 것이다.
최신 버전의 이미지를 사용하려면 참조https://hub.docker.com/r/jetstack/kube-lego/tags/를 사용하여 최신 image.tag=master-3418
(2018/02/08 시점)을 지정합니다.
nginx-ingress 시스템에 ingress 추가
예제apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: web-nginx
namespace: default
annotations:
kubernetes.io/ingress.class: nginx
kubernetes.io/tls-acme: "true"
spec:
rules:
- host: example.com
http:
paths:
- path: /
backend:
serviceName: web
servicePort: 80
tls:
- hosts:
- example.com
secretName: web-tls
name
, namespace
, serviceName
, servicePort
, secretName
, example.com
등 적당한 이름을 지었다.kubernetes.io/ingress.class
변경이 필요합니다.nginx
은nginx-ingress
이므로 주 시스템kube-lego
, kubernetes.io/ingress.class
이 포착되고 처리됩니다.
nginx-ingress-inhouse 시스템에 ingress 추가
예제apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: admin-nginx-inhouse
namespace: default
annotations:
kubernetes.io/ingress.class: nginx-inhouse
kubernetes.io/ingress.provider: nginx
kubernetes.io/tls-acme: "true"
spec:
rules:
- host: admin.example.com
http:
paths:
- path: /
backend:
serviceName: admin-service
servicePort: 80
tls:
- hosts:
- admin.example.com
secretName: admin-tls
nginx-inhouse
nginx-ingress-inhouse
,kube-lego-inhouse
에 잡혔다.
삽입된 것을 지정하지 않으면 kubernetes.io/ingress.provider: nginx
ingress입니다.class도provider 이름으로 응용되었고, 결과는kube-lego의nginxprovider 처리의 영향을 받지 않습니다disable provider no TLS hosts found
쿠베레고는 동작이 없습니다.
(소스 코드의 경우 이 일대 입니다.provider 이름의 지점에 들어가지 않음)
끝내다 annotation.kubernetes.io/ingress.provider
열쇠입니다.
그리고 이것은 latest 이미지가 지원하지 않는 함정입니다.
그리고 어쨌든 DEPRECATED의 슬픔입니다.
다음은cert-manager를 조사합니다.
Reference
이 문제에 관하여(여러 시스템으로nginx-ingress/kube-lego 구축), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/yokomotod/items/ac91acfb39cd1222d3bb
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
# ingress-nginx
curl https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/namespace.yaml \
| kubectl apply -f -
# kube-lego
curl https://raw.githubusercontent.com/jetstack/kube-lego/master/examples/nginx/lego/00-namespace.yaml \
| kubectl apply -f -
helm install stable/nginx-ingress \
--name nginx-ingress \
--namespace ingress-nginx \
--set controller.replicaCount=2
helm install stable/nginx-ingress \
--name nginx-ingress-inhouse \
--namespace ingress-nginx \
--set controller.ingressClass=nginx-inhouse \
--set controller.replicaCount=2
helm install stable/kube-lego \
--name kube-lego \
--namespace kube-lego \
--set image.tag=master-3418 \
--set config.LEGO_LOG_LEVEL=debug \
--set [email protected] \
--set config.LEGO_URL=https://acme-v01.api.letsencrypt.org/directory
helm install stable/kube-lego \
--name kube-lego-inhouse \
--namespace kube-lego \
--set nameOverride=kube-lego-inhouse \
--set image.tag=master-3418 \
--set config.LEGO_LOG_LEVEL=debug \
--set [email protected] \
--set config.LEGO_URL=https://acme-v01.api.letsencrypt.org/directory \
--set config.LEGO_SUPPORTED_INGRESS_CLASS=nginx-inhouse \
--set config.LEGO_DEFAULT_INGRESS_CLASS=nginx-inhouse \
--set config.LEGO_DEFAULT_INGRESS_PROVIDER=nginx \
--set config.LEGO_SECRET_NAME=kube-lego-inhouse-account \
--set config.LEGO_SERVICE_NAME_NGINX=kube-lego-inhouse-nginx \
--set config.LEGO_INGRESS_NAME_NGINX=kube-lego-inhouse-nginx
--set config.LEGO_SERVICE_SELECTOR=kube-lego-inhouse \
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: web-nginx
namespace: default
annotations:
kubernetes.io/ingress.class: nginx
kubernetes.io/tls-acme: "true"
spec:
rules:
- host: example.com
http:
paths:
- path: /
backend:
serviceName: web
servicePort: 80
tls:
- hosts:
- example.com
secretName: web-tls
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: admin-nginx-inhouse
namespace: default
annotations:
kubernetes.io/ingress.class: nginx-inhouse
kubernetes.io/ingress.provider: nginx
kubernetes.io/tls-acme: "true"
spec:
rules:
- host: admin.example.com
http:
paths:
- path: /
backend:
serviceName: admin-service
servicePort: 80
tls:
- hosts:
- admin.example.com
secretName: admin-tls
disable provider no TLS hosts found
annotation.kubernetes.io/ingress.provider
열쇠입니다.그리고 이것은 latest 이미지가 지원하지 않는 함정입니다.
그리고 어쨌든 DEPRECATED의 슬픔입니다.
다음은cert-manager를 조사합니다.
Reference
이 문제에 관하여(여러 시스템으로nginx-ingress/kube-lego 구축), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/yokomotod/items/ac91acfb39cd1222d3bb텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)