Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
EKSのいーかんじなサービス公開方法 #jawsug #jawsug_ct / expose ...
Search
sugimount
December 21, 2018
1
3.2k
EKSのいーかんじなサービス公開方法 #jawsug #jawsug_ct / expose service eks externaldns acm
EKSのいーかんじなサービス公開方法 #jawsug #jawsug_ct
sugimount
December 21, 2018
Tweet
Share
More Decks by sugimount
See All by sugimount
Serverlessな世界をのぞいてみよう! / Let's dive serverless world
sugimount
6
810
Spinnakerでハマった6個のポイント #cndjp / spinnaker-hamari-six-point
sugimount
1
1.2k
Featured
See All Featured
Code Reviewing Like a Champion
maltzj
523
40k
YesSQL, Process and Tooling at Scale
rocio
172
14k
Testing 201, or: Great Expectations
jmmastey
42
7.5k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.6k
Being A Developer After 40
akosma
91
590k
How GitHub (no longer) Works
holman
314
140k
BBQ
matthewcrist
88
9.6k
The Pragmatic Product Professional
lauravandoore
33
6.6k
Product Roadmaps are Hard
iamctodd
PRO
52
11k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
Agile that works and the tools we love
rasmusluckow
329
21k
Transcript
1 EKSのいーかんじなサービス公開方法 Suguru Sugiyama(@sugimount) JAWS-UG コンテナ支部 #13
Who? 2 • Suguru Sugiyama (@sugimount) • Cloud Native Developpers
JP Community運営 https://cnd.connpass.com/ • 趣味:ベース歴7年 • 会社:某SIer
Japan Container Days18.12 3 • EKSを使用してWebアプリケーション(qicoo)を開発して、登壇しました https://speakerdeck.com/cndjp/jkd-v18-dot-12-2w3
ちなみに 4 • Communityとしてロゴ・ステッカー・Tシャツを作成 • お金の使い方がファンキー ジトメェ
5 • あ Amazon EKS Available in Tokyo!!!!!
6 • あ よしEKSでWebアプリケーションを 公開してみよう
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
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に対して、名前解決するレコードを 手動で毎回設定するのは大変
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
EKS Service Expose 10 • httpsで公開するにはどうすればよい・・・? Amazon CertificateManagerと連携することで、 非常に簡単にhttpsが可能
11 設定方法 EKS + ExternalDNS + ACM
設定方法 EKS + ExternalDNS + ACM 12 1. 何かしらのサービスでドメインを購入 例)お名前.comでqicoo.tokyoを購入
設定方法 EKS + ExternalDNS + ACM 13 2. Route53上で HostedZone
を作成
設定方法 EKS + ExternalDNS + ACM 14 3. HostedZone で生成されたNSレコードのvalueをコピー
※ 上記NSレコードは、現在は使用していません
設定方法 EKS + ExternalDNS + ACM 15 4. お名前.com にNSレコードの
value を設定
設定方法 EKS + ExternalDNS + ACM 16 5. EKS Cluster
をGettingStart の手順を基に進める https://docs.aws.amazon.com/ja_jp/eks/latest/userguide/getting-started.html
設定方法 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
設定方法 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 : 作成のみ
設定方法 EKS + ExternalDNS + ACM 19 8. ACMでPublic Certificateを作成
次の流れで進めていく
設定方法 EKS + ExternalDNS + ACM 20 購入したドメインと サブドメインを指定
設定方法 EKS + ExternalDNS + ACM 21 DNS validationを指定
設定方法 EKS + ExternalDNS + ACM 22
設定方法 EKS + ExternalDNS + ACM 23 mask mask mask
mask これを押すことで Route53へ validation 用の CNAMEレコードを自動作成
設定方法 EKS + ExternalDNS + ACM 24 mask mask
設定方法 EKS + ExternalDNS + ACM 25 mask CertificateのARNを KubernetesのManifestで指
定することが可能 hogehoge
設定方法 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 • EKSを使用して、いーかんじなサービス公開方法を紹介 • 任意のドメイン名で公開:ExternalDNS • httpsでアクセス:ACM連携 • EKSを使い始めるときに、この資料を活用頂けますと幸い