원래는 ingress로 nlb도 생성할 수 있지만, 이제는 service로만 nlb를 생성할 수 있다.
내 경우엔 외부에서 접근 가능한 internet-facing nlb를 만들어야 했고, 타겟 그룹은 ip 타입 (타겟의 ip를 지정하여 타겟 그룹으로 연결) 으로 해줘야 했다.
그러나 service에서 LB를 만들어주는 aws load balancer controller는 타겟 그룹에 부착된 sg가 하나일 경우엔 해당 sg를 사용하며 생성된 nlb가 해당 타겟과 통신할 수 있도록 ingress rule을 추가해주는데, 타겟에 여러 sg가 부착된 경우 그 중에서 쿠버네티스 클러스터 네임이 태그된 하나의 sg를 찾고, 해당 sg의 ingress rule을 추가해준다고 한다.
key: kubernetes.io/cluster/${cluster-name} value : 'owned' or 'shared' |
이때, 타겟 타입이 ip인 경우 NLB에 access할 수 있는 ip가 0.0.0.0/0임에 유의하자..
apiVersion: v1
kind: Service
metadata:
name: test-nlb
namespace: test
annotations:
service.beta.kubernetes.io/aws-load-balancer-scheme: internet-facing
service.beta.kubernetes.io/aws-load-balancer-type: external
service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: ip
external-dns.alpha.kubernetes.io/hostname: mydomain.com
service.beta.kubernetes.io/aws-load-balancer-ssl-cert: arn:aws:acm:ap-northeast-2:xxxxxx:certificate/xxxx
service.beta.kubernetes.io/aws-load-balancer-backend-protocol: https
spec:
selector:
app: test-app
ports:
- port: 443
targetPort: 9200
protocol: TCP
type: LoadBalancer