네트워크 로드 밸런서(NLB) 서비스를 통해 내 앱에 연결할 수 없는 이유는 무엇입니까?
NLB(네트워크 부하 분산기) 서비스를 통해 앱에 접속할 수 없는 경우, NLB 연결 문제를 해결하십시오.
클래식 인프라
사용자가 클래식 클러스터에서 NLB 서비스를 작성하여 앱을 노출했습니다.
NLB의 공인 IP 주소를 사용하여 앱에 연결하려고 할 때 연결에 실패했거나 제한시간이 초과되었습니다.
다음과 이유 중 하나로 인해 로드 NLB가 제대로 작동하지 않을 수 있습니다.
- 클러스터가 아직 완전히 배치되지 않았습니다.
- NLB 서비스의 구성 스크립트에 오류가 포함되어 있습니다.
NLB 서비스의 고가용성을 보장할 수 있도록 2개 이상의 작업자 노드가 있으며 완전히 배치된 표준 클러스터를 설정했는지 확인하십시오.
-
작업자 노드를 나열하십시오. CLI 출력에서 작업자 노드의 상태에 준비가 표시되고 머신 유형에 무료 이외의 특성이 표시되는지 확인하십시오.
ibmcloud ks worker ls --cluster CLUSTER_NAME_OR_ID -
버전 2.0 NLB의 경우: NLB 2.0 전제조건을 완료했는지 확인하십시오.
-
NLB 서비스의 구성 파일이 정확한지 확인하십시오.
- 버전 2.0 NLB
apiVersion: v1 kind: Service metadata: name: myservice annotations: service.kubernetes.io/ibm-load-balancer-cloud-provider-enable-features: "ipvs" spec: type: LoadBalancer selector: <selector_key>:<selector_value> ports: - protocol: TCP port: 8080 targetPort: 8080 # Optional. By default, the `targetPort` is set to match the `port` value unless specified otherwise. externalTrafficPolicy: Local ``` 1. **LoadBalancer**를 서비스 유형으로 정의했는지 확인하십시오. 2. `service.kubernetes.io/ibm-load-balancer-cloud-provider-enable-features: "ipvs"` 어노테이션을 포함했는지 확인하십시오. 3. LoadBalancer 서비스의 `spec.selector` 섹션에서 `<selector_key>` 및 `<selector_value>`가 배치 YAML의 `spec.template.metadata.labels` 섹션에서 사용한 키/값 쌍과 동일한지 확인하십시오. 레이블이 일치하지 않으면 LoadBalancer 서비스의 ** Endpoints** 섹션에 `<none>`이 표시되며 인터넷에서 사용자의 앱에 액세스할 수 없습니다. 4. 앱에서 청취하는 **port**를 사용했는지 확인하십시오. 5. `externalTrafficPolicy`를 `Local`로 설정했는지 확인하십시오. * 버전 1.0 NLB ```yaml {: screen} apiVersion: v1 kind: Service metadata: name: myservice spec: type: LoadBalancer selector: <selector_key>:<selector_value> ports: - protocol: TCP port: 8080 targetPort: 8080 # Optional. By default, the `targetPort` is set to match the `port` value unless specified otherwise. ``` 1. **LoadBalancer**를 서비스 유형으로 정의했는지 확인하십시오. 2. LoadBalancer 서비스의 `spec.selector` 섹션에서 `<selector_key>` 및 `<selector_value>`가 배치 YAML의 `spec.template.metadata.labels` 섹션에서 사용한 키/값 쌍과 동일한지 확인하십시오. 라벨이 일치하지 않으면 LoadBalancer 서비스의 **‘엔드포인트(Endpoints)** ’ 섹션에 **‘없음(none)’으로** 표시되며, 인터넷을 통해 앱에 접속할 수 없습니다. 3. 앱에서 청취하는 **port**를 사용했는지 확인하십시오. -
선택 서비스를 확인하고 Events 섹션을 검토하여 잠재적 오류를 찾으십시오.
kubectl describe service <myservice>다음 오류 메시지를 찾으십시오.
- 하나의 노드가 있는 클러스터는 NodePort 유형의 서비스를 사용해야 합니다.
- NLB 서비스를 사용하려면 두 개 이상의 작업자 노드가 있는 표준 클러스터가 있어야 합니다.
- NLB 서비스 요청을 이행하는 데 사용할 수 있는 클라우드 제공자 IP가 없습니다. 클러스터에 포터블 서브넷을 추가하고 다시 시도하십시오.
- 이 오류 메시지는 NLB 서비스에 할당할 수 있는 이동식 공용 IP 주소가 더 이상 남아 있지 않음을 나타냅니다. 클러스터의 포터블 공인 IP 주소를 요청하는 방법에 대한 정보는 클러스터에 서브넷 추가를 참조하십시오. 포터블 공인 IP 주소를 클러스터에 사용할 수 있게 되면 NLB 서비스가 자동으로 작성됩니다.
- 요청된 클라우드 제공자 IP
<cloud-provider-ip>를 사용할 수 없습니다. 다음 클라우드 제공자 IP를 사용할 수 있습니다.<available-cloud-provider-ips> loadBalancerIP섹션을 사용하여 로드 밸런서 YAML의 포터블 공인 IP 주소를 정의했지만 이 포터블 공인 IP 주소는 포터블 공용 서브넷에서 사용할 수 없습니다. 구성 스크립트의loadBalancerIP섹션에서 기존 IP 주소를 삭제하고, 사용 가능한 휴대용 공용 IP 주소 중 하나를 추가하십시오. 사용 가능한 포터블 공인 IP 주소를 자동으로 할당할 수 있도록 스크립트에서loadBalancerIP섹션을 제거할 수도 있습니다.- NLB 서비스에 사용 가능한 노드가 없음
- NLB 서비스를 배치하기에 충분한 작업자 노드가 없습니다. 그 이유 중 하나는 작업자 노드가 두 개 이상인 표준 클러스터를 배치했지만 작업자 노드의 프로비저닝에 실패했기 때문일 수 있습니다.
kubectl get nodes를 실행하여 사용 가능한 작업자 노드를 나열하십시오.- 두 개 이상의 사용 가능한 작업자 노드가 있는 경우
ibmcloud ks worker get --cluster <cluster_name_or_ID> --worker <worker_ID>를 실행하여 작업자 노드 세부사항을 나열하십시오. kubectl get nodes및ibmcloud ks worker get명령에서 리턴된 작업자 노드의 공인 및 사설 VLAN ID가 일치하는지 확인하십시오.
- 사용자 정의 도메인을 사용하여 로드 밸런서 서비스에 연결하는 경우 사용자 정의 도메인이 NLB 서비스의 공인 IP 주소에 맵핑되었는지 확인하십시오.
- NLB 서비스의 공인 IP 주소를 찾으십시오.
kubectl describe service <service_name> | grep "LoadBalancer Ingress" ``` 2. 사용자 정의 도메인이 포인터 레코드(PTR)에 있는 NLB 서비스의 포터블 공인 IP 주소에 맵핑되었는지 확인하십시오.