Upgrade to Pro — share decks privately, control downloads, hide ads and more …

EKSのいーかんじなサービス公開方法 #jawsug #jawsug_ct / expose service eks externaldns acm

9d6837978a1407452ebd46126c7a205f?s=47 sugimount
December 21, 2018
2.4k

EKSのいーかんじなサービス公開方法 #jawsug #jawsug_ct / expose service eks externaldns acm

EKSのいーかんじなサービス公開方法 #jawsug #jawsug_ct

9d6837978a1407452ebd46126c7a205f?s=128

sugimount

December 21, 2018
Tweet

Transcript

  1. 1 EKSのいーかんじなサービス公開方法 Suguru Sugiyama(@sugimount) JAWS-UG コンテナ支部 #13

  2. Who? 2 • Suguru Sugiyama (@sugimount) • Cloud Native Developpers

    JP Community運営 https://cnd.connpass.com/ • 趣味:ベース歴7年 • 会社:某SIer
  3. Japan Container Days18.12 3 • EKSを使用してWebアプリケーション(qicoo)を開発して、登壇しました https://speakerdeck.com/cndjp/jkd-v18-dot-12-2w3

  4. ちなみに 4 • Communityとしてロゴ・ステッカー・Tシャツを作成 • お金の使い方がファンキー ジトメェ

  5. 5 • あ Amazon EKS Available in Tokyo!!!!!

  6. 6 • あ よしEKSでWebアプリケーションを 公開してみよう

  7. EKS Service Expose 7 • EKSでは、ELBを使用してサービスの公開が可能 • CLB・NLB・ALBの全種類が利用可能 • EKSのGettingStartでは、CLBが使用されているため、CLBを採用

    • CLBで特に困った点はなかった (アプリの規模が小さいのもあるかも) ELBの種類 EKSで作成するServiceType 主な特徴 Classic Load Balancer LoadBalancer 何も考えず作成するとコレ 古いタイプのELB Network Load Balancer LoadBalancer annotationに “nlb” と指定 Layer4で動作 Application Load Balancer Ingress aws-alb-ingress-controllerを使用 Layer7で動作 host-base, path-baseルーティングによる ELB集約コストメリット HTTP/2サポートによるパフォーマンス向上 など https://kubernetes.io/docs/concepts/services-networking/service/#network-load-balancer-support-on-aws-alpha
  8. EKS Service Expose 8 • EKSでLoadBalancerを作成すると、CLBと共に AWS側でrandomなEXTERNAL-IPが生成される $ kubectl get

    services -o wide NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE guestbook LoadBalancer 10.100.115.63 <random>.us-west-2.elb.amazonaws.com 3000:31601/TCP 3m • 任意のドメインでサービスを公開するのはどうすればよい・・・? randomなEXTERNAL-IPに対して、名前解決するレコードを 手動で毎回設定するのは大変
  9. EKS Service Expose 9 • OSSのExternalDNSで解決 • Serviceを作成するときに、公開したいFQDNを指定して 自動的に名前解決用のAレコードを生成 •

    対応DNSサービス • AWS Route53 • Azure DNS • Google Cloud DNS • Oracle Cloud Infrastructure DNS など https://github.com/kubernetes-incubator/external-dns
  10. EKS Service Expose 10 • httpsで公開するにはどうすればよい・・・? Amazon CertificateManagerと連携することで、 非常に簡単にhttpsが可能

  11. 11 設定方法 EKS + ExternalDNS + ACM

  12. 設定方法 EKS + ExternalDNS + ACM 12 1. 何かしらのサービスでドメインを購入 例)お名前.comでqicoo.tokyoを購入

  13. 設定方法 EKS + ExternalDNS + ACM 13 2. Route53上で HostedZone

    を作成
  14. 設定方法 EKS + ExternalDNS + ACM 14 3. HostedZone で生成されたNSレコードのvalueをコピー

    ※ 上記NSレコードは、現在は使用していません
  15. 設定方法 EKS + ExternalDNS + ACM 15 4. お名前.com にNSレコードの

    value を設定
  16. 設定方法 EKS + ExternalDNS + ACM 16 5. EKS Cluster

    をGettingStart の手順を基に進める https://docs.aws.amazon.com/ja_jp/eks/latest/userguide/getting-started.html
  17. 設定方法 EKS + ExternalDNS + ACM 17 6. EKS の

    Worker Node (EC2インスタンス) を Deployする時に CloudFormationのTemplateに、IAMRoleを付与 NodeInstanceRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Principal: Service: - ec2.amazonaws.com Action: - sts:AssumeRole Path: "/" ManagedPolicyArns: - arn:aws:iam::aws:policy/AmazonRoute53AutoNamingFullAccess - arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicy - arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy - arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryReadOnly add amazon-eks-nodegroup.yaml
  18. 設定方法 EKS + ExternalDNS + ACM 18 7. EKS ClusterにExternalDNSをDeploy

    https://github.com/kubernetes-incubator/external-dns/blob/master/docs/tutorials/aws.md spec: serviceAccountName: external-dns containers: - name: external-dns image: registry.opensource.zalan.do/teapot/external-dns:latest env: - name: AWS_REGION value: us-west-2 args: - --source=service - --source=ingress - --domain-filter=qicoo.tokyo - --provider=aws - --policy=sync - --aws-zone-type=public - --registry=txt - --txt-owner-id=my-identifier Deployment Manifestを抜粋 awsのリージョンを指定 ExternalDNSと連携する EKSのリソースを指定 ドメイン名を指定 同期ポリシーを指定 sync : 作成, 更新, 削除 upsert-only : 作成のみ
  19. 設定方法 EKS + ExternalDNS + ACM 19 8. ACMでPublic Certificateを作成

    次の流れで進めていく
  20. 設定方法 EKS + ExternalDNS + ACM 20 購入したドメインと サブドメインを指定

  21. 設定方法 EKS + ExternalDNS + ACM 21 DNS validationを指定

  22. 設定方法 EKS + ExternalDNS + ACM 22

  23. 設定方法 EKS + ExternalDNS + ACM 23 mask mask mask

    mask これを押すことで Route53へ validation 用の CNAMEレコードを自動作成
  24. 設定方法 EKS + ExternalDNS + ACM 24 mask mask

  25. 設定方法 EKS + ExternalDNS + ACM 25 mask CertificateのARNを KubernetesのManifestで指

    定することが可能 hogehoge
  26. 設定方法 EKS + ExternalDNS + ACM 26 • ここまで設定することで、いーかんじにサービス公開可能 指定したFQDN・HTTPSで自動的に公開される

    例)https://test.qicoo.tokyo apiVersion: v1 kind: Service metadata: annotations: external-dns.alpha.kubernetes.io/hostname: test.qicoo.tokyo service.beta.kubernetes.io/aws-load-balancer-backend-protocol: http service.beta.kubernetes.io/aws-load-balancer-ssl-cert: arn:aws:acm:us-west-2:hogehoge service.beta.kubernetes.io/aws-load-balancer-ssl-ports: "443“ … snip ... ExternalDNSと連携 するObjectを指定 ACMのARNを指定
  27. まとめ 27 • EKSを使用して、いーかんじなサービス公開方法を紹介 • 任意のドメイン名で公開:ExternalDNS • httpsでアクセス:ACM連携 • EKSを使い始めるときに、この資料を活用頂けますと幸い