개인 Kubernetes 클러스터에 대한 공유 라우팅
14518 단어 kubernetestutorial
집에 상당히 괜찮은 Linux 기계가 하나 있는데, 12개의 vCPU가 있다(고맙습니다Ryzen!)수양 48g
tomorrowlan
도 있다.Digital Ocean에서 이와 유사한 구성은 매달 약 240달러에 실행됩니다!내가 개인 프로젝트에 바쁠 때, 나는 정말 탄력성이나 생산 가치를 상관하지 않는다.기존의 하드웨어를 사용하고 더욱 광범위한 인터넷에서 내가 구축한 기능을 다른 사람과 공유하는 것은 매우 좋을 것이다.약간의 개원 도구 덕분에 나는 이 꿈을 실현할 수 있었다.Inlets, Contour, KinD, external-dns 그리고 이 있으면 나는 쉽게 새로운 집단을 시작하고 몇 초 안에 그것들을 외부에서 공유할 수 있다.
구성 요소
NAT
위의 그림은 이 모든 구성 요소가 어떻게 협동하여 일을 하는지 간략하게 소개한다.솔직히 말하면 그것은 실제 상황보다 더 복잡해 보인다.
이 구조에서, 우리는 집에서 실행되는 하드웨어에서 실행되는 Kubernetes 집단을 가지고 있다.그것은 가정 공유기 와 가정 ISP가 하고 있는 어떤 네트워크 쓸데없는 말 뒤에 있다.일반적으로, 공유기의 특수 설정이 없으면, 이 집단은 완전히 접근할 수 없습니다.또한 시간이 지남에 따라 변경되는 ISP의 동적 IP 주소를 받을 수 있습니다.그 밖에 설령 당신이 이 모든 것을 설정했다 하더라도 인터넷상의 무작위 데이터가 당신의 가정 네트워크에 직접 연결되는 것을 원하지 않을 수도 있다.
반대로 우리는 공공 IP를 가진 저렴한 클라우드 가상 기기를 우리의 입구점으로 사용할 수 있다.앞에서 언급한 모든 구성 요소 덕분에 우리는 유량을 이 가상 기기 터널에서 우리의 개인 집단으로 옮길 수 있다.이제 나는 이 구성 요소들의 작용을 깊이 연구할 것이다.그 밖에 나는 그것들을 어떻게 사용하여 간단한 응용 프로그램을 외부에 공개하는지 보여 줄 것이다.나는 그것들을 어떻게 설치하거나 설정하는지 깊이 토론하지 않을 것이다.그것들은 모두 좋은 유지보수와 끊임없는 업데이트를 받았기 때문에 이 방면은 정부 문서에 남겨 두는 것이 가장 좋다.
입수구 입수구
우선, 우리는 open-core부터 시작할 것이다. 왜냐하면 그것은 이 모든 것 중에서 가장 중요한 부분이라고 할 수 있기 때문이다.우리는 그것을 사용하여 유량을 공공적으로 접근할 수 있는 클라우드 실례 (나는 매달 5달러짜리 디지털 해양 가상 머신을 사용한) 터널에서 우리의 내부 집단으로 옮길 것이다.포털은 inlets-operator 소프트웨어이므로 계층 4 케이블 연결 또는 TLS 터미널이 필요한 경우 Pro 버전의 비용을 지불해야 합니다.나 같은 애호가들의 용례에 따라 당신은 무료 버전에서 제공한 내용을 사용할 수 있습니다.구체적으로 말하면 우리는 사용할 것이다inlets.
inlets 조작부호는 Kubernetes 조작부호입니다. 그룹에 설치할 것입니다.이것은 끊임없이 새로운
LoadBalancer
서비스를 관찰하고
사용자가 선택한 클라우드에서'노드 종료'라고 불리는 VM과 공개LoadBalancer
서비스의 공공 IP를 제공합니다.이 경우 입구 컨트롤러의 LoadBalancer
서비스를 공개할 것입니다.본 강좌 설치
에 따라 inlets 조작부호를 사용합니다.
외부 dns 외부 dns
이건 절대로'가지기 좋아요'.입구에서 응용 프로그램에 접근할 수 있는 공공 IP 주소를 제공합니다.그러나 원본 IP 주소는 상당히 서투르다.따라서 만약 당신이 수중에 도메인이 있다면, 이 IP를 도메인에 비추도록 DNS를 설정할 수 있습니다.나의 집단에 대해 나는 사용하는 경향이 있다
*.k8s.downey.cloud
.이것은 통상적으로 수동적인 과정이지만, 반드시 이렇게 해야만 하는 것은 아니다.라는 항목을 사용하여
LoadBalancer
서비스에 DNS를 자동으로 구성할 수 있습니다!그것은 매우 매끄럽다.당신이 해야 할 일은 external-dns.alpha.kubernetes.io/hostname
과 당신이 원하는 호스트 이름 주석 서비스를 사용하는 것입니다.그리고 외부 dns 컨트롤러는 나머지 작업을 완성하고 dns를 설정합니다!저는 Digital Ocean VM을 입구 노드로 사용하기 때문에 외부 dns를 설치하여 Digital Ocean의 클라우드 dns를 설정했습니다.설명 파일의 단계 설치
외부 dns의 설치는 어느 정도에 당신이 사용하는 dns 공급업체에 달려 있습니다.I followed these 에 따라 사용 중인 클라우드를 찾으십시오.디지털 해양 에 대해.
포털 컨트롤러 프로파일 포털 컨트롤러
엄밀히 말하면 흡입구가 있는 Contour 를 사용할 필요가 없다.공개하고 싶은 모든 응용 프로그램에
LoadBalancer
서비스를 만들 수 있습니다. 입구에서 가상 컴퓨터를 만들어서 이 서비스에 연결할 수 있습니다.비록 이런 방법을 채택하더라도 원가는 신속하게 증가할 것이다.입구 컨트롤러가 있으면 우리는 하나의 에이전트만 공개하고 내부에서 이 에이전트를 우리의 모든 응용 프로그램에 연결할 수 있다.모든 포털 컨트롤러는 이 용도로 사용할 수 있지만 Envoy proxy 사용하기를 좋아하는 이유는 다음과 같습니다.
시작 문서 설치
LoadBalancer
에 따라 프로파일을 빠르게 시작하고 실행합니다.Contour는 입구가 노출될 ytt
서비스 YAML을 제공합니다.외부 dns와 잘 어울리도록 하기 위해 아래 ytt
overlay1을 사용하여 내 영역으로 주석을 달았습니다.#@ load("@ytt:overlay", "overlay")
#@overlay/match by=overlay.subset({"kind": "Service", "metadata":{"name": "envoy", "namespace": "projectcontour"}, "spec":{"type":"LoadBalancer"}}),expects=1
--------
metadata:
#@overlay/match missing_ok=True
annotations:
#@overlay/match missing_ok=True
#@overlay/merge
external-dns.alpha.kubernetes.io/hostname: "*.k8s.downey.cloud"
예를 들어, 인라인 템플릿을 실행하기 위해 설치 명령을 약간 조정할 수 있습니다.kubectl apply -f <(ytt -f https://projectcontour.io/quickstart/contour.yaml -f /tmp/external-dns-overlay.yaml --ignore-unknown-comments=true)
1 - 만약 당신이 이전에 들어 본 적이 없다면Carvel, 나는 당신이 가보라고 건의합니다.이것은 Kubernetes 유틸리티 세트
의 일부분으로 내가 제어할 수 없는 YAML을 변환하는 도구입니다.이 윤곽장치처럼'부두 일꾼'의 쿠베르니토스 친절했어
KinD 또는 microk8s 를 사용하여 클러스터를 실행하는 것이 매우 편리합니다.CLI와 Docker 데몬만 실행하면 됩니다.클러스터가 Docker 컨테이너로만 실행될 경우 클러스터를 매우 빠르게 시작하고 제거할 수 있습니다.
즉, 여기에는 minikube, kubeadm, 또는 운영체제에서 직접 사용하는 등 다른 유효한 옵션이 많다는 것이다.
설치
그들의 quick start guide에 따라 설치하다.
집회 시위
그렇다면 이 모든 것은 어떻게 협동하여 일을 합니까?단일 어플리케이션 배포 측면에서 살펴보겠습니다.
ytt
.다음
kind
을 사용하여 httpbin
클러스터에 배치할 수 있습니다.apiVersion: apps/v1
kind: Deployment
metadata:
name: httpbin
spec:
replicas: 2
selector:
matchLabels:
app: httpbin
template:
metadata:
labels:
app: httpbin
spec:
containers:
- image: docker.io/kennethreitz/httpbin
imagePullPolicy: IfNotPresent
name: httpbin
ports:
- containerPort: 80
다음은 그룹을 쉽게 접근할 수 있도록 httpbin
서비스를 만들 수 있습니다.apiVersion: v1
kind: Service
metadata:
name: httpbin
labels:
app: httpbin
spec:
ports:
- name: http
port: 80
targetPort: 80
selector:
app: httpbin
이거 멋있어.이제 클러스터 내 포트 80 Deployment
을 통해 도달할 수 있습니다.다음 단계는 필요하지 않지만, 재미를 위해서, 우리는 ClusterIP
명령을 사용하여 로컬에서 접근할 수 있다.tim@tomorrowlan:~/workspace/k8s-yaml$ kubectl port-forward service/httpbin 8000:80
Forwarding from 127.0.0.1:8000 -> 80
Forwarding from [::1]:8000 -> 80
달리기를 통해 당신은 httpbin.default.svc.cluster.local
기중기를 클릭할 수 있습니다.지금까지 줄곧 괜찮았어!계속, 죽여
kubectl port-forward
.다른 사람들이 모두 그것을 접할 수 있도록 할 때가 되었다.우리는
curl localhost:8000
자원을 만들어서 Contour가 우리의 httpbin
서비스와 그 데이터에 대한 경로를 알 수 있도록 할 수 있다.apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: httpbin
spec:
rules:
- host: httpbin.k8s.downey.cloud
http:
paths:
- backend:
serviceName: httpbin
servicePort: 80
그렇습니다!우리는 현재 http://httpbin.k8s.downey.cloud 인터넷상의 kubectl port-forward
응용 프로그램에 접근할 수 있습니다!😌요점을 요약하여 다시 말하다.
그럼 방금 무슨 일이 있었죠?우리 이전의 도표를 되돌아봅시다...
Ingress
서비스를 첨부하였으며, 우리는 httpbin
로 이 대리인을 주석하였다httpbin
를 발견했기 때문에 클라우드 가상 컴퓨터에 공공 IPLoadBalancer
서비스에 external-dns.alpha.kubernetes.io/hostname: "*.k8s.downey.cloud"
주석이 있기 때문에 외부 dns는 dns를 서비스를 가리키는 공공 IP로 설정한다LoadBalancer
를 위해 작성된 LoadBalancer
리소스를 보고 external-dns.alpha.kubernetes.io/hostname
로 가는 요청을 Ingress
httpbin
서비스로 직접 보내기 위해 특사를 구성했습니다.httpbin.k8s.downey.cloud
httpbin
서비스로 유량을 ClusterIP
크레인httpbin
응용 프로그램 자체의 절차는 실제로 위탁 관리 Kubernetes 집단에서 사용하는 것ClusterIP
, httpbin
, httpbin
과 다르지 않다!막후에서 많은 일이 일어났지만, 일단 모든 것이 준비되면, 기본적으로 모든 것이 정상이다.우리는 지금 내가 가장 좋아하는 Kubernetes의 한 면을 볼 수 있는 기회가 있다. 그것이 얼마나 확장성이 있는지.몇 개의 구축 블록을 조합함으로써 우리는 개인 개발 기기에서 위탁 관리 Kubernetes 집단의
Deployment
서비스 체험을 신속하게 복제할 수 있다.나는 12개의 vCPU와 48Gig의 RAM을 사용할 수 있기 때문에 비평범한 작업 부하를 개발할 충분한 자원이 있으며, 나는 여전히 온라인으로 최종 결과를 보여줄 수 있다.입구 - 출구 노드를 운행하는 데 매달 5달러가 든다.하나, 적어도, 나는 이것이 매우 멋있다고 생각한다.
건배!🐢
Reference
이 문제에 관하여(개인 Kubernetes 클러스터에 대한 공유 라우팅), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/downey/public-routing-to-a-private-kubernetes-cluster-ebn텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)