Traefik - kubernetes 첫 시험
1. Kubernetes 서비스 노출 안내
kubernetes 1.2 버 전부터 kubernetes 는 Ingress 대상 을 제공 하여 대외 노출 서 비 스 를 실현 했다.지금까지 kubernetes 는 모두 세 가지 노출 서비스 방식 이 있 습 니 다.
1.1、LoadBlancer Service
LoadBlancer Service 는 kubernetes 깊이 가 클 라 우 드 플랫폼 과 결 합 된 구성 요소 입 니 다.LoadBlancer Service 노출 서 비 스 를 사용 할 때 실제 적 으로 바닥 클 라 우 드 플랫폼 에 부하 이퀄 라이저 를 만들어 외부 노출 서 비 스 를 신청 합 니 다.현재 LoadBlancer Service 가 지원 하 는 클 라 우 드 플랫폼 은 상대 적 으로 완선 되 었 다. 예 를 들 어 외국 의 GCE, Digital Ocean, 국내의 아 리 클 라 우 드, 개인 클 라 우 드 OpenStack 등 이다. LoadBlancer Service 깊이 가 클 라 우 드 플랫폼 과 결합 되 었 기 때문에 일부 클 라 우 드 플랫폼 에서 만 사용 할 수 있다.
1.2、NodePort Service
NodePort Service 는 말 그대로 클 러 스 터 의 모든 node 에 하나의 포트 를 노출 한 다음 에 이 포트 를 특정한 service 에 투사 하여 이 루어 진 것 입 니 다. node 의 포트 마다 많 지만 안전성 과 용이 성 (서비스 가 많 으 면 어 지 럽 고 포트 충돌 문제) 으로 인해 실제 사용 이 많 지 않 을 수 있 습 니 다.
1.3、Ingress
Ingress 라 는 것 은 1.2 후에 야 나타 난 것 입 니 다. Ingress 사용 자 를 통 해 nginx 등 오픈 소스 의 역방향 대리 부하 이퀄 라이저 를 사용 하여 대외 노출 서 비 스 를 실현 할 수 있 습 니 다. 다음은 Ingress 를 상세 하 게 말씀 드 리 겠 습 니 다. traefik 은 Ingress 를 사용 하기 때 문 입 니 다.
Ingress 를 사용 할 때 보통 세 개의 구성 요소 가 있 습 니 다.
역방향 에이전트 부하 이퀄 라이저
1.3.1 역방향 에이전트 부하 이퀄 라이저
역방향 프 록 시 부하 균형 기 는 매우 간단 하 다. 말하자면 nginx, apache 따위 이다.클 러 스 터 에서 역방향 프 록 시 부하 이퀄 라이저 는 자 유 롭 게 배치 할 수 있 고 Replication Controller, Deployment, DaemonSet 등 을 사용 할 수 있 지만 개인 적 으로 DaemonSet 방식 으로 배치 하 는 것 을 좋아 하기 때문에 편리 합 니 다.
1.3.2、Ingress Controller
Ingress Controller 는 실질 적 으로 모니터 로 이해 할 수 있 습 니 다. Ingress Controller 는 kubernetes API 와 끊임없이 접촉 하고 실시 간 으로 백 엔 드 서비스, pod 등 변 화 를 감지 합 니 다. 예 를 들 어 pod, service 증가 와 감소 등 입 니 다.이러한 변화 정 보 를 얻 은 후에 Ingress Controller 는 다음 의 Ingress 생 성 설정 과 결합 한 다음 에 역방향 프 록 시 부하 이퀄 라이저 를 업데이트 하고 그 설정 을 갱신 하여 서비스 발견 의 역할 을 합 니 다.
1.3.3、Ingress
Ingress 의 간단 한 이 해 는 규칙 의 정의 이다.예 를 들 어 특정한 도 메 인 이름 은 특정한 service 에 대응 합 니 다. 즉, 특정한 도 메 인 이름 의 요청 이 들 어 왔 을 때 특정한 service 에 전달 합 니 다.이 규칙 은 Ingress Controller 와 결합 한 다음 에 Ingress Controller 는 부하 이퀄 라이저 설정 에 동적 으로 기록 하여 전체적인 서비스 발견 과 부하 균형 을 실현 합 니 다.
좀 어 리 석 으 면 그림 을 보 세 요.
위의 그림 에서 볼 수 있 듯 이 실제 요청 이 들 어 왔 는 지 부하 이퀄 라이저 에 의 해 차단 되 었 는 지, 예 를 들 어 nginx, 그리고 Ingress Controller 는 Ingress 와 의 상호작용 을 통 해 특정한 도 메 인 이름 이 어떤 service 에 대응 하 는 지 알 수 있 고, kubernetes API 와 의 상호작용 을 통 해 service 주소 등 정 보 를 알 수 있다.종합 후 설정 파일 을 생 성하 여 부하 균형 기 에 실시 간 으로 기록 한 다음 에 부하 균형 기 reload 이 규칙 은 서비스 발견, 즉 동적 매 핑 을 실현 할 수 있다
상기 내용 을 알 게 된 후에 이것 은 내 가 왜 부하 균형 기 를 Daemon Set 로 배치 하 는 것 을 좋아 하 는 지 잘 설명 했다.어쨌든 요청 은 우선 부하 균형 기 에 의 해 차단 되 었 기 때문에 모든 노드 에 배치 하고 hostport 방식 으로 80 포트 를 감청 합 니 다.그러면 다른 방식 으로 부하 이퀄 라이저 가 어디 에 있 는 지 확인 하지 못 하 는 문 제 를 해결 하고 모든 node 의 80 을 방문 하면 요청 을 정확하게 해석 할 수 있 습 니 다.전단 에 nginx 를 하나 더 놓 으 면 부하 균형 이 다시 이 루어 집 니 다.
2. Traefik 사용
마이크로 서비스 구조 와 Docker 기술 과 kbenetes 편성 도구 가 최근 몇 년 에 야 유행 하기 시 작 했 기 때문에 처음에 역방향 프 록 시 서버, 예 를 들 어 nginx, apache 는 지원 을 제공 하지 않 았 습 니 다. 그들 도 선지 자가 아니 었 기 때 문 입 니 다.그래서 Ingress Controller 라 는 것 이 나 타 났 습 니 다.즉, Ingress Controller 의 존 재 는 바로 kubernetes 와 상호작용 을 할 수 있 고 nginx 설정 도 쓸 수 있 으 며 reload 도 할 수 있 습 니 다. 이것 은 절충 방안 입 니 다.최근 에 등장 한 traefik 은 천성적으로 kubernetes 에 대한 지원 을 제공 했다. 즉, traefik 자체 가 kubernetes API 와 상호작용 을 하고 백 엔 드 변 화 를 감지 할 수 있 기 때문에 traefik 을 사용 할 때 Ingress Controller 는 이미 쓸모 가 없 기 때문에 전체적인 구 조 는 다음 과 같다.
2.1 Traefik 배치
이미 대체적으로 Ingress 와 traefik 을 알 게 되 었 으 니 배치 하기 가 매우 간단 하 다.
2.1.1 Daemon Set 배치
우선 Daemon Set 방식 으로 모든 node 에 traefik 을 시작 하고 hostPort 방식 으로 모든 node 의 80 포트 를 감청 하도록 합 니 다.
kubectl create -f traefik.ds.yanl
# Daemon set
apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
name: traefik-ingress-lb
namespace: kube-system
labels:
k8s-app: traefik-ingress-lb
spec:
template:
metadata:
labels:
k8s-app: traefik-ingress-lb
name: traefik-ingress-lb
spec:
terminationGracePeriodSeconds: 60
hostNetwork: true
restartPolicy: Always
containers:
- image: traefik
name: traefik-ingress-lb
resources:
limits:
cpu: 200m
memory: 30Mi
requests:
cpu: 100m
memory: 20Mi
ports:
- name: http
containerPort: 80
hostPort: 80
- name: admin
containerPort: 8580
args:
- --web
- --web.address=:8580
- --kubernetes
그 중에서 traefik 감청 node 의 80 과 8580 포트, 80 은 정상 적 인 서 비 스 를 제공 합 니 다. 8580 은 자체 적 인 UI 인터페이스 입 니 다. 원래 기본 값 은 8080 입 니 다. 환경 에서 포트 가 충돌 하기 때문에 여 기 를 임시로 바 꿉 니 다.
2.1.2 Ingress 배치
위의 긴 사설 에서 인 그 레 스 컨트롤 러 는 배치 할 필요 가 없다 는 것 을 알 았 기 때문에 인 그 레 스 를 직접 배치 하면 된다.
kubectl create -f traefik.ing.yaml
# Ingress
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: traefik-ingress
spec:
rules:
- host: traefik.www.test.com
http:
paths:
- path: /
backend:
serviceName: test-www
servicePort: 8080
- host: traefik.api.test.com
http:
paths:
- path: /
backend:
serviceName: test-api
servicePort: 8080
실제 사전 클 러 스 터 에는 test - ww 와 test - api 라 는 service 가 존재 하고 해당 하 는 service 백 엔 드 에 도 pod 가 많 습 니 다.따라서 실제 업무 용기 (test - ww, test - api) 를 배치 하 는 과정 을 구체 적 으로 쓰 지 않 습 니 다. 여러분 이 테스트 할 때 이 test 의 서 비 스 를 자신의 업무 서비스 로 교체 하면 됩 니 다.
2.1.3 Traefik UI 배치
traefik 자체 가 사용 할 수 있 도록 UI 를 제공 합 니 다. 같은 Ingress 방식 으로 노출 되 었 습 니 다. 만 들 기만 하면 됩 니 다.
kubectl create -f ui.yaml
# ui yaml
---
apiVersion: v1
kind: Service
metadata:
name: traefik-web-ui
namespace: kube-system
spec:
selector:
k8s-app: traefik-ingress-lb
ports:
- name: web
port: 80
targetPort: 8580
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: traefik-web-ui
namespace: kube-system
spec:
rules:
- host: traefik-ui.local
http:
paths:
- path: /
backend:
serviceName: traefik-web-ui
servicePort: web
2.1.4 방문 테스트
모두 만 든 후, 테스트 를 기다 리 는 도 메 인 이름 을 임의의 node 에 분석 하면 됩 니 다. 페이지 는 캡 처 하지 않 고 캡 처 하면 노출 됩 니 다........................................................
2.2 건강 검진
건강 검진 에 대해 서 는 kubernetes 의 Liveness Probe 를 사용 하여 테스트 할 수 있 습 니 다. Liveness Probe 검사 에 실패 하면 traefik 은 이 pod 를 자동 으로 제거 합 니 다. 다음은 예제 입 니 다.
test 의 deployment, 건강 검진 방식 은?
cat /tmp/health
용기 가 시 작 된 지 2 분 후에 이 파일 을 삭제 하고 건강 검진 에 실 패 했 습 니 다.apiVersion: v1
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
name: test
namespace: default
labels:
test: alpine
spec:
replicas: 1
selector:
matchLabels:
test: alpine
template:
metadata:
labels:
test: alpine
name: test
spec:
containers:
- image: mritd/alpine:3.4
name: alpine
resources:
limits:
cpu: 200m
memory: 30Mi
requests:
cpu: 100m
memory: 20Mi
ports:
- name: http
containerPort: 80
args:
command:
- "bash"
- "-c"
- "echo ok > /tmp/health;sleep 120;rm -f /tmp/health"
livenessProbe:
exec:
command:
- cat
- /tmp/health
initialDelaySeconds: 20
테스트 서비스
apiVersion: v1
kind: Service
metadata:
name: test
labels:
name: test
spec:
ports:
- port: 8123
targetPort: 80
selector:
name: test
test 의 Ingress
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: test
spec:
rules:
- host: test.com
http:
paths:
- path: /
backend:
serviceName: test
servicePort: 8123
모두 만 든 후, traefik ui 인터페이스 에 들 어가 면 2 분 간격 으로 건강 검진 에 실패 한 후, kubernetes 가 pod 를 재 구축 하 는 것 을 관찰 할 수 있 으 며, traefik 은 백 엔 드 목록 에서 이 pod 를 제거 합 니 다.
기타 더 많은 게임 방법 참고 하 세 요 공식 문서 (Let 's Entrypt, 개인 블 로그 복음 을 지지 하 는 것 을 발 견 했 습 니 다) 오류 가 있 으 면 지적 을 환영 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.