Google Kubernetes Engine에서 Kubernetes로드 밸런서의 외부 IP 주소를 선택하는 방법


16

Google Kubernetes Engine을 사용하여 웹 앱을 배포하고 있으며 사용하려는 도메인 이름 때문에 Google Cloud Platform에서 동일한 프로젝트의 일부로 제어하는 ​​기존 고정 IP 주소에서로드 밸런서를 통해 액세스 할 수 있도록하고 싶습니다. 이미이 IP를 가리 킵니다.

포드에 사용한 yaml 파일은 다음과 같습니다.

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
  labels:
    app: my-app
spec:
  containers:
  - name: my-container
    image: gcr.io/my-project/my-app:latest

다음을 사용하여로드 밸런서를 설정할 수 있습니다.

apiVersion: v1
kind: Service
metadata:
  name: my-load-balancer
spec:
  ports:
  - port: 80
    targetPort: 80
  selector:
    app: my-app
  type: LoadBalancer

이것은 앱에 액세스 할 수있는 외부 IP를 제공하지만 원하는 IP를 사용하도록 구성 할 수있는 방법을 찾을 수 없습니다. 서비스 설명서 spec.clusterIP 설정을 언급하지만,이 외부 IP에 관계하지 않는 것 같습니다. 마찬가지로로드 밸런서가 설정되면 서비스의 status.loadBalancer.ingress.ip 필드는 외부 IP 주소로 설정되지만 구성 가능한 설정은 아닙니다.

대안으로 Google Compute Engine 콘솔에서 수동으로 전달 규칙을 작성하여 정적 IP 주소에서 Kubernetes가 설정 한 대상 풀로 트래픽을 전달하려고 시도했지만 연결을 시도 할 때 연결이 거부되었습니다.

선택한 고정 IP 주소로 Google Kubernetes 엔진의 Kubernetes 팟 (또는 복제 컨트롤러)을 노출시키는 방법이 있습니까?

답변:


9

TL; DR Kubernetes v1.1을 실행하는 Google 컨테이너 엔진 loadBalancerIP은 자동 할당 IP를 정적 우선 으로 표시 만 지원합니다 .

Kubernetes v1.1은 externalIP를 지원합니다 :

apiVersion: v1
kind: Service
spec:
  type: LoadBalancer
  loadBalancerIP: 10.10.10.10
  ...

지금까지 GCE에서 사용하는 방법에 대한 일관된 문서는 없습니다. 확실하게이 IP는 먼저 사전 할당 된 고정 IP 중 하나 여야합니다 .

교차 지역로드 밸런싱 문서는 계산 엔진 및되지는 Kubernetes / 컨테이너 엔진에 대한 대부분이지만, 여전히 유용 특히 일부 "구성 서비스를로드 밸런싱".

GCE에서 Kubernetes LoadBalancer를 생성하면 클러스터의 머신으로 구성된 대상 풀 (일반적으로 서비스 선택기와 일치하는 포드를 실행하는 대상 풀)을 가리키는 네트워크 컴퓨팅 엔진> 네트워크> 네트워크로드 밸런싱> 전달 규칙이 생성됩니다. . 네임 스페이스를 삭제해도 생성 된 규칙을 깔끔하게 정리하지 못하는 것 같습니다.


최신 정보

실제로 문서화되어 있지만 실제로 지원됩니다.

  1. Kubernetes 1.1 이상을 실행 중인지 확인하십시오 ( GKE에서 클러스터 편집 및 "노드 버전"확인).
  2. 아래 네트워킹> 외부 IP는 주소 당신은 이미 할 몇 가지 임시은 한 번없이 배포을 (클러스터의 VM 인스턴스를 가리키는으로 표시하지 않을 경우 또는 확실하지, loadBalancerIP당신이 실행할 때 대기가 외부 IP 할당 당신이 때까지, kubectl get svc그리고에 그 IP 조회 해당 페이지의 목록). 그중 하나를 static 으로 표시 하고 External Address is 라고 가정 해 봅시다 10.10.10.10.
  3. 위와 같이 LoadBalancer 를 편집하십시오 loadBalancerIP=10.10.10.10(Google에서 제공 한 IP에 적합).

이제 LoadBalancer 또는 네임 스페이스를 삭제하면 해당 클러스터에 다시 배치 할 때 해당 IP 주소를 유지해야합니다. 클러스터를 변경해야하는 경우 일부 수동 조정이 가능해야합니다.

  1. 아래 섹션, "대상 풀"탭을 "네트워크로드 밸런싱" 버튼 "대상 풀 만들기"를 클릭합니다 :
    • 이름 : cluster-pool(또는 다른 이름)
    • 지역 : 클러스터 중 하나의 지역을 선택하십시오
    • 건강 점검 : 원하는 경우 선택 사항
    • 기존 인스턴스 그룹 선택 : Kubernetes 클러스터
  2. 아래 탭을 "규칙을 전달"섹션에서 "네트워크로드 밸런싱" , "전달 규칙 만들기"버튼을 클릭합니다 :
    • 이름 : http-cross-region-gfr(또는 다른 이름)
    • 지역 : 클러스터 중 하나의 지역을 선택하십시오
    • 외부 IP : loadbalancer-ip-crossregion방금 예약했습니다
    • 대상 풀 : cluster-pool방금 생성 한 것을 선택하십시오

그것들은 여전히 ​​관련이 있습니까?
Ben

8

좋은 소식. 이것은 Kubernetes v1.1에서 수정 될 것입니다. service.spec.loadBalancerIP자신이 알고있는 IP로 필드를 설정할 수 있습니다 .


이전:

이것은 균열을 통해 떨어지는 기능입니다. 그것은 작동해야했고 (어느 시점에는 효과가 있었을 수도 있지만) 잘 테스트되지 않았고 길을 따라 부러진 다음 실수로 설계되었습니다 (일시적으로).

1.0 이후에 수정해야 할 사항이 바로 여기에 있습니다.

https://github.com/GoogleCloudPlatform/kubernetes/issues/10323


이것은 아마도 대답이 아닌 의견이어야합니다.
Ward-Monica Monica 복원

5
@Ward : dev에가에서 "그것은 불가능" 입니다 , 이럴 대답하고, 같은 받아 들여졌다.
Sven
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.