클래식 클러스터: Ingress 제어기가 구역에 배치되지 않는 이유는 무엇입니까?
인프라 제공자 및 버전:
- 클래식
- Red Hat OpenShift 버전 4
oc get svc -n openshift-ingress를 실행할 때 하나 이상의 구역에 공용 Ingress 제어기가 없습니다.
router-default서비스가 배치되지 않았거나 서비스에 외부 IP 주소가 지정되어 있지 않을 수 있습니다. 예를 들어, 단일 구역 클러스터에서 다음이 표시될 수 있습니다.NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE router-default LoadBalancer 172.21.47.119 <none> 80:32637/TCP,443:31719/TCP 26m router-internal-default ClusterIP 172.21.51.30 <none> 80/TCP,443/TCP,1936/TCP 26m- 다중 구역 클러스터가 있는 경우 하나의 구역에 Ingress 제어기 서비스가 없습니다. 예를 들어,
dal10,dal12,dal13에 워커 노드가 있는 다중 영역 클러스터의 경우,dal10에 대한router-default서비스와dal12에 대한router-dal12서비스는 표시될 수 있지만,dal13에 대한router-dal13서비스는 표시되지 않을 수 있습니다. 작업자 노드가 있는 첫 번째 존의 Ingress 컨트롤러 서비스 이름은 항상router-default이며, 이후 클러스터에 추가하는 존의 Ingress 컨트롤러 서비스 이름은router-dal12와 같은 형식을 따릅니다. 하나의 구역에는 Ingress 제어기 서비스가 없지만 다른 구역에 둘 이상의 Ingress 제어기 서비스가 있는 경우도 있습니다.NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE router-default LoadBalancer 172.21.47.119 169.XX.XX.XX 80:32637/TCP,443:31719/TCP 26m router-dal12 LoadBalancer 172.21.47.119 169.XX.XX.XX 80:32637/TCP,443:31719/TCP 26m router-internal-default ClusterIP 172.21.51.30 <none> 80/TCP,443/TCP,1936/TCP 26m
라우터 서비스는 다음 이유 중 하나로 인해 배치될 수 있습니다.
-
Ingress 제어기 서비스가 배치되지 않았거나 Ingress 제어기 서비스에 외부 IP 주소가 지정되지 않은 경우: 표준 클러스터에서 구역에 처음으로 클러스터를 작성하는 경우 IBM Cloud 인프라 계정에서 해당 구역의 공용 VLAN 및 사설 VLAN이 자동으로 프로비저닝됩니다. 해당 영역에서는 사용자가 지정한 공용 VLAN에 공용 휴대용 서브넷 1개가, 사용자가 지정한 사설 VLAN에 사설 휴대용 서브넷 1개가 요청됩니다. Red Hat OpenShift on IBM Cloud의 경우 VLAN에는 서브넷이 40개로 제한되어 있습니다. 해당 영역 내 클러스터의 VLAN이 이미 해당 한도에 도달한 경우, Ingress 하위 도메인의 프로비저닝이 실패하고 기본 공용 Ingress 컨트롤러의 프로비저닝도 실패합니다. VLAN에 몇 개의 서브넷이 있는지 확인하려면, IBM Cloud 인프라 콘솔에서 [ 네트워크 ] > [ IP 관리 ] > [VLAN]을 선택하십시오. 클러스터를 작성하는 데 사용한 VLAN의 VLAN 번호를 클릭하십시오. 서브넷 섹션을 검토하여 40개 이상의 서브넷이 있는지 확인하십시오.
-
하나의 구역에 Ingress 제어기 서비스가 있는 경우: Ingress 제어기 서비스가 작성되면 클러스터 내의 구역에 자동으로 분산됩니다. Ingress 제어기 서비스가 작성될 때 클러스터가 작성된 첫 번째 구역의 네트워크가 준비되지 않은 경우에는 해당 구역의 Ingress 제어기 서비스가 다른 구역에 배치될 수 있습니다. 하나의 구역에 두 개의 Ingress 제어기 서비스가 작성되고 처음 구역에는 Ingress 제어기 서비스가 작성되지 않습니다.
IP 주소가 없는 Ingress 제어기 서비스에 대한 VLAN 문제 또는 Ingress 제어기 서비스가 없는 구역에 대한 다중 구역 Ingress 제어기 서비스 문제를 해결하십시오.
VLAN 문제 해결
IP 주소가 없는 Ingress 제어기 서비스의 VLAN 문제를 해결하려면 다음을 수행하십시오.
옵션 1: 새로운 VLAN이 필요한 경우, IBM Cloud 지원팀에 문의하여 신청하십시오. 그런 다음, 이 새 VLAN을 사용하는 클러스터를 작성하십시오.
옵션 2: 사용할 수 있는 다른 VLAN이 있다면, 기존 클러스터에서 VLAN 스패닝을 구성할 수 있습니다. VLAN 스패닝이 이미 활성화되어 있는지 확인하려면 ibmcloud ks vlan spanning get --region REGION 명령 을 사용하십시오. 그 후에는 사용 가능한 서브넷이 있는 다른 VLAN을 사용하는 클러스터에 새 작업자 노드를 추가할 수 있습니다. 존당 최소 두 개의 워커 노드를 생성하십시오. 이제 Ingress 제어기가 라우터가 자동으로 배치할 수 있도록 IP 주소를 사용할
수 있습니다.
옵션 3: VLAN에 있는 모든 서브넷을 사용하지 않는 경우, 해당 서브넷을 클러스터에 추가하여 VLAN 내의 서브넷을 재사용할 수 있습니다.
-
사용할 서브넷이 사용 가능한지 확인하십시오. 사용 중인 인프라 계정이 여러 IBM Cloud 계정 간에 공유될 수 있습니다. 이 경우에는
ibmcloud oc subnets명령을 실행하여 바인드된 클러스터의 서브넷을 확인해도 사용자가 자체 클러스터에 대한 정보만 볼 수 있습니다. 인프라 계정 소유자에게 확인하여 해당 서브넷이 사용 가능하며 다른 계정 또는 팀에 의해 사용 중이 아닌지 확인하십시오. -
ibmcloud ks cluster subnet add명령 기존 서브넷을 클러스터에서 사용할 수 있도록 하십시오. -
서브넷이 정상적으로 작성되어 클러스터에 추가되었는지 확인하십시오. 서브넷 CIDR은 Subnet VLANs 섹션에 나열되어 있습니다.
ibmcloud ks cluster get --cluster CLUSTER_NAME --show-resources이 예제 출력에서는 두 번째 서브넷이
2234945공용 VLAN에 추가되었습니다.Subnet VLANs VLAN ID Subnet CIDR Public User-managed 2234947 10.xxx.xx.xxx/29 false false 2234945 169.xx.xxx.xxx/29 true false 2234945 169.xx.xxx.xxx/29 true false -
추가한 서브넷의 포터블 IP 주소가 클러스터의 Ingress 제어기에 사용되는지 확인하십시오. 서비스가 새 서브넷의 포터블 IP 주소를 사용하는 데 몇 분이 걸릴 수 있습니다.
- Ingress 하위 도메인 없음:
ibmcloud ks cluster get --cluster CLUSTER를 실행하여 Ingress 하위 도메인이 채워졌는지 확인하십시오. - Ingress 제어기가 구역에 배치되지 않음:
oc get svc -n openshift-ingress를 실행하여 누락된 Ingress 제어기가 외부 IP 주소로 배치되었는지 확인하십시오.
- Ingress 하위 도메인 없음:
다중 구역 Ingress 제어기 서비스 배치 문제 해결
Ingress 컨트롤러 서비스가 배포되지 않은 영역에 Ingress 컨트롤러 서비스를 생성합니다. 중복 Ingress 제어기 서비스가 처음에 다른 구역에서 작성된 경우에는 해당 Ingress 제어기 서비스를 삭제하지 마십시오.
-
Ingress 컨트롤러 서비스가 배포되지 않은 영역에 Ingress 컨트롤러 서비스용 YAML 파일을 생성합니다. Ingress 제어기 서비스의 이름을
router-<zone>으로 지정하십시오.apiVersion: v1 kind: Service metadata: annotations: service.kubernetes.io/ibm-load-balancer-cloud-provider-ip-type: public finalizers: - service.kubernetes.io/load-balancer-cleanup labels: app: router ingresscontroller.operator.openshift.io/owning-ingresscontroller: default router: router-default name: router-<zone> namespace: openshift-ingress spec: externalTrafficPolicy: Cluster selector: ingresscontroller.operator.openshift.io/deployment-ingresscontroller: default sessionAffinity: None type: LoadBalancer -
클러스터에서 Ingress 제어기 서비스를 작성하십시오.
oc create -f router-<zone>.yaml -
Ingress 제어기 서비스가 올바른 구역에 작성되었는지 확인하십시오. 출력에서 EXTERNAL-IP 주소를 가져오십시오.
oc get svc router-<zone> -n openshift-ingress출력 예
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE router-dal12 LoadBalancer 172.21.57.132 169.XX.XX.XX 80/TCP,443/TCP,1940/TCP 3m -
기본 Ingress 제어기의 하위 도메인을 가져오십시오. 출력에서
<cluster_name>-<random_hash>-0000.<region>.containers.appdomain.cloud와 같은 형식의 하위 도메인을 찾으십시오.ibmcloud ks nlb-dns ls -c CLUSTER_NAME_OR_ID -
Ingress 제어기의 하위 도메인에 Ingress 제어기 서비스의 IP 주소를 등록하십시오.
ibmcloud ks nlb-dns add -c CLUSTER_NAME_OR_ID --ip ROUTER_SVC_IP --nlb-host ROUTER_SUBDOMAIN