호스트를 Kubernetes의 서비스 경로로 리디렉션할 수 있습니까?
호스트 주소를 서비스 경로와 일치시키려고 합니다. 예를 들어 사이트 1과 사이트 2에 서비스하는 ingnx 포드가 있다고 생각해 보겠습니다. 제 두 사이트를 경로로 제공하는 서비스에 대해 생각해 보겠습니다:
- my-nginx-service (178.123.55.37:80)
- /site1
- /site2
다음과 같은 방법으로 매핑할 수 있습니다:
- host: site-one.mydomain.com
http:
paths:
- backend:
serviceName: nginx-service
servicePort: 80
servicePath: /site2
- host: site-two.mydomain.com
http:
paths:
- backend:
serviceName: nginx-service
servicePort: 80
servicePath: /site2
? 나는 그것에 대해 문서에서 아무것도 발견하지 못했다. 아니면 내가 그들을 잘 이해하지 못했을 수도 있다.
시간 내주셔서 정말 감사합니다!
아래 출력을 통해 위 필드가 존재하지 않음을 알 수 있습니다(적어도 버전 1.9.3에는).
:
...
FIELDS:
serviceName <string> -required-
Specifies the name of the referenced service.
servicePort <string> -required-
Specifies the port of the referenced service.
...
다음 필드에 경로를 지정해야 합니다. 경로가 적중되면 요청이 에 지정된 서비스를 사용하여 라우팅됩니다. nginx 또는 트래픽 서버 입력을 사용하는 경우 주석을 사용하여 요청을 리디렉션할 수 있습니다.
서비스는 호스트 이름을 알지 못하기 때문에 (제가 제대로 이해했다면) 당신이 하려는 일은 불가능합니다. 포드 내에서 nginx 구성을 수정하면 원하는 것에 도달할 수 있지만, 그것은 K8s 접근 방식이 아닐 것이다.
입력 리소스를 추가해야 합니다. 수신자는 호스트 이름을 인식합니다. 그들은 서비스 간 로드 밸런싱을 수행합니다. 따라서 /site1은 하나의 서비스로 이동하고 /site2는 다른 서비스로 이동합니다.
입력은 다음과 같이 표시되어야 합니다:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress
spec:
rules:
- host: site-one.mydomain.com
http:
paths:
- backend:
serviceName: nginx-service1
servicePort: 80
- host: site-two.mydomain.com
http:
paths:
- backend:
serviceName: nginx-service2
servicePort: 80
site1과 site2는 서로 다른 배포 환경에서 실행되며 서로 다른 서비스가 대상이 됩니다. L7 로드 밸런서인 인그레스는 호스트 이름을 확인하고 올바른 서비스로 요청을 전달할 수 있으며, 이는 결국 올바른 포드에 도달하게 됩니다.
각 호스트에 경로를 추가할 수도 있으므로 site-one.mydomain.com/path1, site-one.mydomain.com/path2 및 site-two.mydomain.com/path1 (예: )은 서로 다른 서비스로 전달됩니다.
인그레스 yaml 파일은 다음과 같습니다:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress
spec:
rules:
- host: site-one.mydomain.com
http:
paths:
- path: /path1
backend:
serviceName: nginx-service1
servicePort: 80
- path: /path2
backend:
serviceName: nginx-service2
servicePort: 8080
- path: /
backend:
serviceName: nginx-service3
servicePort: 80
- host: site-two.mydomain.com
http:
paths:
- path: /path1
backend:
serviceName: nginx-service1
servicePort: 80
이것이 당신이 정확히 요구하는 것이 아니라는 것을 알지만, 이것이 당신이 원하는 것을 이룰 수 있는 올바른 방법입니다.
작업자가 이 문제를 해결했는지는 확실하지 않지만, 다른 사람이 여전히 이 요구 사항을 가지고 있는 경우에는 를 사용하여 두 개의 입력으로 이 작업이 가능해야 합니다.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/app-root: /site1
name: site-one-ingress
spec:
ingressClassName: nginx
rules:
- host: site-one.mydomain.com
http:
paths:
- backend:
serviceName: nginx-service
servicePort: 80
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/app-root: /site2
name: site-two-ingress
spec:
ingressClassName: nginx
rules:
- host: site-two.mydomain.com
http:
paths:
- backend:
serviceName: nginx-service
servicePort: 80
요청하면 nginx-service에서 제공되는 로 리디렉션됩니다. 문서 루트의 파일이 제공됩니다.
마찬가지로 에 대한 요청은 파일에서 동일한 nginx-service에 의해 서비스되는 것으로 리디렉션된다.
'개발하자' 카테고리의 다른 글
Kubernetes : StatefulSet에서 관리하는 특정 포드를 다시 만들지 않고 삭제하는 방법? (0) | 2023.11.01 |
---|---|
Flutter 데스크탑 응용 프로그램에서 글로벌 키보드 단축키를 등록하는 방법은 무엇입니까? (1) | 2023.11.01 |
펄럭이는 지속적인 티커 (1) | 2023.10.31 |
플러터 웹의 XMLHttpRequest 오류 [CORS AWS API 게이트웨이 사용] (1) | 2023.10.30 |
테라폼으로 aws에 도메인을 등록할 수 있나요? (1) | 2023.10.30 |