[트러블슈팅] Ingress 생성 시 'ADDRESS 없음' 해결

brillog·2023년 8월 22일
0

Kubernetes

목록 보기
9/11

문제 발생

ingress-nginx 설치 후 ingress를 생성한 뒤 kubectl get ingress 수행 시 생성한 ingress의 'ADDRESS'가 비어있는 문제 발생하였습니다.

$ kubectl get ingress
NAME    CLASS    HOSTS          ADDRESS   PORTS   AGE
test    <none>   www.test.com             80      2s

문제 해결

1. ingress-class 값 찾기

ingress-controller의 deployment에서 ingress-class를 찾습니다.

$ kubectl get deploy -n ingress-nginx
NAME                       READY   UP-TO-DATE   AVAILABLE   AGE
ingress-nginx-controller   1/1     1            1           39m
$ kubectl describe deploy ingress-nginx-controller -n ingress-nginx | grep ingress-class
      --ingress-class=nginx

ingress-class 값이 'nginx' 임을 기억합니다.

2. service의 CLUSTER-IP 찾기

이번에는 ingress-controller service의 CLUSTER-IP를 찾습니다.

$ kubectl get svc -n ingress-nginx
NAME                                 TYPE           CLUSTER-IP       EXTERNAL-IP                                                                   PORT(S)                      AGE
ingress-nginx-controller             LoadBalancer   172.20.86.91     xxxxxxxxxxxxxxxxxxxxxxxxxxx76dd9-406056662.ap-northeast-2.elb.amazonaws.com   80:32120/TCP,443:30024/TCP   45m
ingress-nginx-controller-admission   ClusterIP      172.20.138.129   <none>                                                                        443/TCP                      45m

service의 CLUSTSER-IP가 '172.20.86.91' 임을 기억합니다.

'ingress-controller' deployment의 ingress-class 값과 service의 CLUSTER-IP를 알아냈으니 이제 이 두 개를 이용하여 ingress를 생성하겠습니다.

3. ingress 제대로 생성하기

ingress 생성용 yaml 파일은 다음과 같습니다.

$ cat test-ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: test
  namespace: default
  annotations:
    kubernetes.io/ingress.class: nginx  # 1번에서 찾은 값 입력
spec:
  rules:
  - host: www.test.com
    http:
      paths:
      - pathType: Prefix
        path: /
        backend:
          service:
            name: test-svc
            port:
              number: 80
status:
  loadBalancer:
    ingress:
    - ip: 172.20.86.91  # 2번에서 찾은 값 입력

metadata.annotations.kubernetes.io/ingress.classstatus.loadbalancer.ingress.ip를 위에서 찾은 값들로 넣어준 뒤 배포하면 됩니다.

metadata:
  annotations:
    kubernetes.io/ingress.class: <1번에서_찾은_값>
status:
  loadBalancer:
    ingress:
    - ip: <2번에서_찾은_값>

kubectl apply -f test-ingress.yaml 실행 시 ADDRESS 값이 제대로 출력되는 것을 확인할 수 있습니다.

$ kubectl get ingress
NAME    CLASS    HOSTS          ADDRESS                                                                       PORTS   AGE
test    <none>   www.test.com   xxxxxxxxxxxxxxxxxxxxxxxxxxx76dd9-406056662.ap-northeast-2.elb.amazonaws.com   80      61s

Reference

개인적으로 공부하며 작성한 글로, 내용에 오류가 있을 수 있습니다.

profile
Cloud & DevOps ♡

0개의 댓글