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
780
Spinnakerでハマった6個のポイント #cndjp / spinnaker-hamari-six-point
sugimount
1
1.2k
Featured
See All Featured
Designing on Purpose - Digital PM Summit 2013
jponch
115
7k
Designing for Performance
lara
604
68k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5k
The Language of Interfaces
destraynor
154
24k
Building an army of robots
kneath
302
43k
The Cost Of JavaScript in 2023
addyosmani
45
6.7k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
250
21k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
44
2.2k
Raft: Consensus for Rubyists
vanstee
136
6.6k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
4
370
How to train your dragon (web standard)
notwaldorf
88
5.7k
Statistics for Hackers
jakevdp
796
220k
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を使い始めるときに、この資料を活用頂けますと幸い