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.1k
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
790
Spinnakerでハマった6個のポイント #cndjp / spinnaker-hamari-six-point
sugimount
1
1.2k
Featured
See All Featured
Git: the NoSQL Database
bkeepers
PRO
427
64k
How To Stay Up To Date on Web Technology
chriscoyier
789
250k
How GitHub (no longer) Works
holman
311
140k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
132
33k
Making Projects Easy
brettharned
116
6k
Building a Modern Day E-commerce SEO Strategy
aleyda
38
7k
Gamification - CAS2011
davidbonilla
80
5.1k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
38
1.9k
Docker and Python
trallard
42
3.1k
Fireside Chat
paigeccino
34
3.1k
Producing Creativity
orderedlist
PRO
342
39k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
44
6.9k
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を使い始めるときに、この資料を活用頂けますと幸い