할당 된 포트와 다른 포트에서 응답하는 Kubernetes 서비스
몇 가지 서비스를 배포했는데 한 서비스가 다른 서비스와 다르게 작동하는 것을 발견했습니다. 8090 포트 (내부적으로 8443에 매핑 됨)에서 수신하도록 구성했지만 포트 8080에서 전송하는 경우에만 요청이 작동합니다. 여기에 서비스에 대한 yaml 파일이 있으며 (필수 사항으로 정리) 서비스를 캡슐화하는 배포가 있습니다. 및 컨테이너
apiVersion: v1
kind: Service
metadata:
name: uisvc
namespace: default
labels:
helm.sh/chart: foo-1
app.kubernetes.io/name: foo
app.kubernetes.io/instance: rb-foo
spec:
clusterIP: None
ports:
- name: http
port: 8090
targetPort: 8080
selector:
app.kubernetes.io/component: uisvc
Helm을 설치 한 후을 실행 kubectl get svc
하면 다음과 같은 출력이 표시됩니다.
fooaccess ClusterIP None <none> 8888/TCP 119m
fooset ClusterIP None <none> 8080/TCP 119m
foobus ClusterIP None <none> 6379/TCP 119m
uisvc ClusterIP None <none> 8090/TCP 119m
그러나 실행중인 다른 컨테이너 중 하나에 ssh하고 8090에서 curl 요청을 발행하면 "연결이 거부되었습니다"라는 메시지가 표시됩니다. "http : // uisvc : 8080"으로 말하면 올바른 응답을 받고 있습니다. 컨테이너는 기본적으로 8080에서 수신하는 스프링 부트 애플리케이션을 실행하고 있습니다. 내가 생각 해낼 수있는 유일한 설명은이 구성에서 포트 / targetPort가 무시되고 다른 포드가 내부의 스프링 서비스에 직접 도달한다는 것입니다.
이 동작이 맞습니까? 8090에서 듣지 않는 이유는 무엇입니까? 어떻게 이런 식으로 작동해야합니까?
편집 : 출력 kubectl describe svc uisvc
Name: uisvc
Namespace: default
Labels: app.kubernetes.io/instance=foo-rba
app.kubernetes.io/managed-by=Helm
app.kubernetes.io/name=rba
helm.sh/chart=rba-1
Annotations: meta.helm.sh/release-name: foo
meta.helm.sh/release-namespace: default
Selector: app.kubernetes.io/component=uisvc
Type: ClusterIP
IP: None
Port: http 8090/TCP
TargetPort: 8080/TCP
Endpoints: 172.17.0.8:8080
Session Affinity: None
Events: <none>
답변
.NET을 사용한 이후 예상되는 동작 headless service
입니다.
헤드리스 서비스는 서비스 검색 메커니즘 그래서 대신에 하나의 반환에 사용되는 DNS A records
의는 DNS server
여러 반환 A records
개인 포드의 IP가 백업 서비스에 서비스를 각각 가리키는. 따라서 간단한 DNS A records
조회 를 수행 하고 서비스의 일부인 모든 포드의 IP를 가져옵니다.
이후 headless service
생성하지 않는 iptables
규칙을하지만 생성 dns records
하는 대신, 당신은 당신의 포드 대신 프록시와 직접 상호 작용할 수 있습니다. 따라서 문제를 해결 <servicename:port>
하면 <podN_IP:port>
연결이 바로 포드로 이동합니다. 이 모든 것이 동일한 네임 스페이스에있는 한 전체 DNS 이름으로 해결할 수 없습니다.
여러 포드를 사용하면 DNS가 모든 포드를 제공하고 임의의 순서 (또는 RR 순서)로 배치합니다. 순서는 DNS 서버 구현 및 설정에 따라 다릅니다.
더 많은 정보를 원하시면 다음을 방문하십시오 :
- 서비스 네트워킹 / 헤드리스 서비스
- 이 스택 질문은 헤드리스 서비스의 작동 방식을 설명하는 훌륭한 답변입니다.