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 팟 (또는 복제 컨트롤러)을 노출시키는 방법이 있습니까?
답변
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를 생성하면 클러스터의 머신으로 구성된 대상 풀 (일반적으로 서비스 선택기와 일치하는 포드를 실행하는 대상 풀)을 가리키는 네트워크 컴퓨팅 엔진> 네트워크> 네트워크로드 밸런싱> 전달 규칙이 생성됩니다. . 네임 스페이스를 삭제해도 생성 된 규칙을 깔끔하게 정리하지 못하는 것 같습니다.
최신 정보
실제로 문서화되어 있지만 실제로 지원됩니다.
- Kubernetes 1.1 이상을 실행 중인지 확인하십시오 ( GKE에서 클러스터 편집 및 “노드 버전”확인).
- 아래 네트워킹> 외부 IP는 주소 당신은 이미 할 몇 가지 임시은 한 번없이 배포을 (클러스터의 VM 인스턴스를 가리키는으로 표시하지 않을 경우 또는 확실하지,
loadBalancerIP
당신이 실행할 때 대기가 외부 IP 할당 당신이 때까지,kubectl get svc
그리고에 그 IP 조회 해당 페이지의 목록). 그중 하나를 static 으로 표시 하고 External Address is 라고 가정 해 봅시다10.10.10.10
. - 위와 같이 LoadBalancer 를 편집하십시오
loadBalancerIP=10.10.10.10
(Google에서 제공 한 IP에 적합).
이제 LoadBalancer 또는 네임 스페이스를 삭제하면 해당 클러스터에 다시 배치 할 때 해당 IP 주소를 유지해야합니다. 클러스터를 변경해야하는 경우 일부 수동 조정이 가능해야합니다.
- 아래 섹션, “대상 풀”탭을 “네트워크로드 밸런싱” 버튼 “대상 풀 만들기”를 클릭합니다 :
- 이름 :
cluster-pool
(또는 다른 이름) - 지역 : 클러스터 중 하나의 지역을 선택하십시오
- 건강 점검 : 원하는 경우 선택 사항
- 기존 인스턴스 그룹 선택 : Kubernetes 클러스터
- 이름 :
- 아래 탭을 “규칙을 전달”섹션에서 “네트워크로드 밸런싱” , “전달 규칙 만들기”버튼을 클릭합니다 :
- 이름 :
http-cross-region-gfr
(또는 다른 이름) - 지역 : 클러스터 중 하나의 지역을 선택하십시오
- 외부 IP :
loadbalancer-ip-crossregion
방금 예약했습니다 - 대상 풀 :
cluster-pool
방금 생성 한 것을 선택하십시오
- 이름 :
답변
좋은 소식. 이것은 Kubernetes v1.1에서 수정 될 것입니다. service.spec.loadBalancerIP
자신이 알고있는 IP로 필드를 설정할 수 있습니다 .
이전:
이것은 균열을 통해 떨어지는 기능입니다. 그것은 작동해야했고 (어느 시점에는 효과가 있었을 수도 있지만) 잘 테스트되지 않았고 길을 따라 부러진 다음 실수로 설계되었습니다 (일시적으로).
1.0 이후에 수정해야 할 사항이 바로 여기에 있습니다.
https://github.com/GoogleCloudPlatform/kubernetes/issues/10323