>  기사  >  백엔드 개발  >  gRPC는 마이크로서비스의 서비스 IP 주소를 어떻게 알 수 있나요?

gRPC는 마이크로서비스의 서비스 IP 주소를 어떻게 알 수 있나요?

王林
王林앞으로
2024-02-11 18:09:08772검색

gRPC는 마이크로서비스의 서비스 IP 주소를 어떻게 알 수 있나요?

gRPC는 분산 시스템에서 마이크로서비스를 구축하기 위한 고성능 오픈 소스 원격 프로시저 호출 프레임워크입니다. gRPC를 사용할 때 일반적인 질문은 클라이언트에게 마이크로서비스의 서비스 IP 주소를 알리는 방법입니다. 먼저 PHP 편집자 Shinichi는 gRPC가 인터페이스 정의 언어로 프로토콜 버퍼를 사용하고 전송 프로토콜로 HTTP/2를 사용하는 방법을 설명했습니다. 그런 다음 편집자는 서비스 IP 주소 문제를 해결하기 위해 일반적으로 사용되는 두 가지 방법인 정적 구성과 서비스 검색을 소개했습니다. 정적 구성은 클라이언트 코드에 서비스의 IP 주소를 하드코딩합니다. 이 방법은 간단하고 간단하지만 구성을 수동으로 업데이트해야 합니다. 서비스 검색은 Consul이나 Etcd와 같은 서비스 등록 및 검색 도구를 사용하여 서비스의 IP 주소를 동적으로 얻는 것입니다. 이 접근 방식은 더 유연하고 자동화되어 있지만 추가 배포 및 유지 관리가 필요합니다. 어떤 방법을 선택하든 gRPC의 정상적인 작동을 보장하려면 클라이언트 코드에 해당 논리를 구현하여 서비스의 IP 주소를 가져와야 합니다.

질문 내용

Google Cloud Platform의 마이크로서비스 데모부터 시작했습니다. 서비스가 컨테이너에 배포될 때 grpc 스텁이 어떻게 작동하는지 궁금합니다.

내가 이해한 바로는 특정 서비스의 컨테이너는 yaml 구성 파일에 지정된 서비스 IP로 주소가 지정됩니다. 그렇다면 서비스의 grpc 서버는 서비스 IP를 수신해야 합니까? 그런데 다음 코드 조각을 발견했습니다.

으아아아

IP가 없는 주소를 서버가 어떻게 수신하는지 알고 싶습니다.

해결책

:{port}은 "IP가 없는 주소"가 아닙니다.

Listen 문서에는 "주소 매개변수의 호스트가 비어 있거나 문자 그대로 지정되지 않은 IP 주소인 경우 Listen은 로컬 시스템에서 사용 가능한 모든 유니캐스트 및 애니캐스트 IP 주소를 수신합니다."가 포함되어 있습니다.

따라서 이 경우 호스트 주소가 없으면 유효 주소는 0.0.0.0 ,它对应于所有接口。由此推论,人们在使用容器时常犯的一个错误是将其代码绑定到 localhost (127.0.0.1)이 되며 컨테이너 외부에서 코드에 액세스할 수 없습니다.

0.0.0.0을 사용하는 것은 특히 컨테이너 작업 시 주소 바인딩을 컨테이너 런타임에 효과적으로 위임하므로 일반적인(좋은) 방법입니다.

따라서 애플리케이션은 컨테이너 내부의 모든 인터페이스에서 {port} 실행됩니다. 그런 다음 컨테이너 런타임은 이러한 인터페이스 중 하나 이상을 호스트의 인터페이스와 예를 들어 바인딩합니다. 클라이언트 코드는 호스트의 IP 주소에 연결됩니다.

컨테이너가 Kubernetes에 의해 관리되는 경우 Kubernetes는 애플리케이션을 실행하는 컨테이너에 IP 주소를 할당하며 이러한 컨테이너는 일반적으로 IP 주소뿐만 아니라 클러스터 DNS도 포함하는 Kubernetes 서비스 리소스를 사용하여 다른 서비스에 노출됩니다.

  1. Kubernetes YAML은 서비스 DNS를 지정할 수 있습니다.
  2. Kubernetes는 선택한 컨테이너(IP 및 포트)에 대한 DNS 이름 요청을 확인합니다.
  3. 컨테이너 런타임은 호스트 포트에서 들어오는 요청을 컨테이너 포트로 라우팅합니다
  4. gRPC 서버는 net.Listen으로 정의한 net.Listen{port} 인터페이스의 컨테이너 런타임 트래픽을 허용합니다.

위 내용은 gRPC는 마이크로서비스의 서비스 IP 주소를 어떻게 알 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제