nginx-ingress

Nmaespace 를 생성 합니다.

kubectl create namespace kube-ingress

nginx-ingress 를 DaemonSet 으로 설치 합니다.

cat << EOF | helm upgrade --install nginx-ingress stable/nginx-ingress --namespace kube-ingress --values -
controller:
  kind: DaemonSet
  config:
    use-forwarded-headers: "true"
  service:
    annotations:
      service.beta.kubernetes.io/aws-load-balancer-connection-idle-timeout: "3600"
EOF

설치 내역을 확인 합니다.

helm list
helm history nginx-ingress

kubectl get pod,svc -n kube-ingress

ELB 주소를 확인 합니다.

ELB_DOMAIN="$(kubectl get svc -n kube-ingress | grep LoadBalancer | grep nginx-ingress-controller | awk '{print $4}')"

ELB 주소를 Route53 에서 원하는 도메인의 CNAME 으로 등록 합니다.

mzdev.be 라는 도메인이 있고, ELB 주소를 *.spot.mzdev.be 로 연결 하고자 할때 다음과 같은 방법으로 등록 할수 있습니다.

ROOT_DOMAIN="mzdev.be"
BASE_DOMAIN="spot.${ROOT_DOMAIN}"

# HostedZoneId
ZONE_ID="$(aws route53 list-hosted-zones | ROOT_DOMAIN=${ROOT_DOMAIN}. jq -r '.HostedZones[] | select(.Name==env.ROOT_DOMAIN) | .Id' | cut -d'/' -f3)"

# CanonicalHostedZoneNameID
ELB_SUB_ID="$(echo ${ELB_DOMAIN} | cut -d'-' -f1)"

ELB_ZONE_ID="$(aws elb describe-load-balancers --load-balancer-name ${ELB_SUB_ID} | jq -r '.LoadBalancerDescriptions[] | .CanonicalHostedZoneNameID')"
RECORD="/tmp/route53_record.json"

cat > ${RECORD} << EOF
{
  "Changes": [
    {
      "Action": "UPSERT",
      "ResourceRecordSet": {
        "Name": "*.${BASE_DOMAIN}",
        "Type": "A",
        "AliasTarget": {
          "HostedZoneId": "${ELB_ZONE_ID}",
          "DNSName": "${ELB_DOMAIN}",
          "EvaluateTargetHealth": false
        }
      }
    }
  ]
}
EOF

aws route53 change-resource-record-sets --hosted-zone-id ${ZONE_ID} --change-batch file://${RECORD}