Kubernetes Ingress로 외부 리소스 노출
저는 여전히 재택근무를 하고 있지만(좋아합니다), 이제 이 문제를 해결할 시간입니다. 노출하는 데 가장 적합한 방법을 선택하는 동안 Kubernetes 클러스터에서 Ingress를 사용하지 않는 이유가 무엇인지 생각했습니다.
조금 이상하게 보일 수 있지만 내 말을 들어보십시오.
따라서 목표를 달성하려면 한 가지가 필요합니다. Kubernetes 서비스가 외부 리소스를 가리키도록 하려면 어떻게 해야 할까요?
잠깐, 왜 서비스야? 이전에 Ingress에 대해 언급하지 않았습니까? 네, 맞습니다.
Kubernetes에서 Ingress는 수신하는 모든 요청을 리디렉션하는 서비스가 필요하므로 Ingress로 HA를 적절하게 노출하려면 이를 가리킬 수 있는 서비스를 만들어야 합니다.
일반적으로 서비스는 파드 세트를 노출하는 데 사용됩니다. 이런 식으로 서로 다른 애플리케이션이 서로 통신해야 하는 경우 포드 이름(다양하게 변경될 수 있음)을 사용할 필요가 없지만 서비스 이름은 사용할 수 있습니다.
서비스를 생성할 때 다른 리소스인 엔드포인트가 자동으로 생성됩니다. 이 엔드포인트에는 서비스 선택기 사양에서 지정한 선택기와 일치하는 파드의 참조(모든 IP 주소)가 포함됩니다.
이러한 방식으로 생성된 엔드포인트는 우리가 생성한 서비스와 동일한 이름을 갖게 됩니다.
하지만 여기 문제가 있습니다. 선택기 없이 서비스를 생성할 수 있으며 그렇게 하면 엔드포인트도 직접 생성해야 하며 이 엔드포인트는 Kubernetes 클러스터 외부의 IP를 가리킬 수 있습니다.
Kubernetes Ingress를 사용하여 HA를 노출하기 위해 생성해야 하는 YAML을 살펴보겠습니다.
끝점.yml
apiVersion: v1
kind: Endpoints
metadata:
name: home-assistant
subsets:
- addresses:
- ip: 1.1.1.1 # Insert your home-assistant IP here
ports:
- name: ha
port: 8123
protocol: TCP
서비스.yml
apiVersion: v1
kind: Service
metadata:
name: home-assistant
spec:
ports:
- name: ha
port: 80
protocol: TCP
targetPort: 8123
type: ClusterIP
clusterIP: None
참고:
clusterIP
속성을 의도적으로 None
로 설정했습니다. 이는 Kubernetes에 이 서비스에 IP를 제공하지 않도록 지시합니다. 우리는 그것을 필요로하지 않습니다. 이와 같은 서비스를 헤드리스 서비스라고도 합니다.ingress.yml
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: nginx
cert-manager.io/cluster-issuer: "letsencrypt-prod"
name: home-assistant
spec:
rules:
- host: ha.awesome-domain.com # insert your domain here
http:
paths:
- backend:
serviceName: home-assistant
servicePort: ha
path: /
tls:
- hosts:
- ha.awesome-domain.com # insert your domain here
secretName: home-assistant-tls
이제 cert-manager가 작업을 마친 후 이 세 파일 모두에 대해
kubectl apply -f ...
를 실행하면 Kubernetes 외부의 Home Assistant 인스턴스를 가리키는 유효한 인증서가 있는 도메인으로 끝납니다.그리고 k8s 클러스터 내에서 HA를 사용하는 일부 서비스를 이동하고 싶다고 말한 것을 기억하십니까? 이제 IP 주소를 사용하는 대신 배포하고 HA의 URL로 `home-assistant'를 사용하기만 하면 됩니다.
완료를 위해 이미 HA 인스턴스에 대한 로컬 도메인이 있는 경우 엔드포인트 생성을 건너뛰고 Service's
externalName
property 직접 사용할 수 있습니다.
Reference
이 문제에 관하여(Kubernetes Ingress로 외부 리소스 노출), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/oen/expose-an-external-resource-with-a-kubernetes-ingress-om텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)