写点什么

OpenSource ,开始将 Kubernetes 和 Amazon ECS 结合使用

  • 2019-10-21
  • 本文字数:2289 字

    阅读完需:约 8 分钟

OpenSource ,开始将 Kubernetes 和 Amazon ECS 结合使用


从今天开始,您将可以对 Amazon Elastic Container Service (Amazon ECS) 和 Kubernetes 管理的服务使用统一的服务发现功能。我们最近推出了 ECS 服务发现功能,它使用 Amazon Route 53 Auto Naming (Auto Naming) API 创建和管理服务名称注册表,从而方便发现容器化的服务以及相互建立连接。服务名称会自动映射到一组 DNS 记录。这样您可以在代码中使用名称来引用服务(例如 backend.example.com),编写将在运行时解析到该名称,并进而解析到该服务的终端节点的 DNS 查询。我们希望也让 Kubernetes 用户享受 Auto Naming API 的优势,从而使对 Auto Naming API 的支持延及 Kubernetes。借助这种集成,您可以方便地自动复制 Kubernetes 服务并导入 Auto Naming API 管理的服务注册表。Kubernetes 集群之外的客户端现在可以轻松地使用友好的服务名称解析这些服务终端节点。如要启用此集成,我们向 Kubernetes 孵化器项目 External DNS 作出了贡献。现在,在 Amazon ECS 中运行的服务可以通过向 Route 53 发送简单的 DNS 查询,发现并与在 Kubernetes 中运行的服务连接。


什么是 Auto Naming?

Auto Naming API 是管理 DNS 记录以及 Route 53 和第三方运行状况检查的替代方法。Auto Naming 会提取 DNS 协议的详细技术信息并建立一个服务注册表,通过该注册表方便地管理您的所有服务终端节点。您可以通过简单的 DNS 调用发现您的服务,然后 Auto Naming 会返回运行正常 终端节点的位置。Auto Naming 中的主要 API 包括:


  • CreatePublicDNSNamespace — 创建只能以编程方式管理的公有 Route 53 托管区域,例如使用 AWS SDK 开发工具包或 Auto Naming API 管理(Route 53 控制台目前支持仅支持 Auto Naming 查看托管区域和记录。)

  • CreatePrivateDNSNamespace — 创建可在您指定的 VPC 内访问的私有 Route 53 托管区域;托管区域只能以编程方式访问

  • CreateService — 在命名空间中创建新的服务;该服务定义了 DNS 和运行状况检查设置

  • RegisterInstance — 将特定实例注册到服务,并创建对应的 DNS 记录以及可选的运行状况检查

  • DeregisterInstace — 删除实例注册,并删除相关 DNS 记录以及可选的运行状况检查


如需了解更多关于 Auto Naming API 的信息,请参阅 Amazon Route 53 API 参考。下面来看如何开始将 Auto Naming 用于在 Kubernetes 集群中运行的应用程序。


第 1 步:设置 IAM 权限

如要将 Auto Naming 用于 Kubernetes,用户必须拥有“AmazonRoute53AutoNamingFullAccess”托管 IAM 策略中概括的权限。在下面的 AWS CLI 示例中,我们创建了一个名为 external-dns 的新用户,并授予需要的权限:


Bash


$ aws iam create-group --group-name external-dns
$ aws iam attach-group-policy --policy-arn arn:aws:iam::aws:policy/AmazonRoute53AutoNamingFullAccess --group-name external-dns
$ aws iam create-user --user-name external-dns
$ aws iam add-user-to-group --user-name external-dns --group-name external-dns
复制代码


有关 AWS CLI 的更多信息,请参阅 AWS 命令行界面用户指南


第 2 步:设置命名空间

如要开始使用服务发现功能,请使用 AWS CLI 创建一个 DNS 命名空间。命名空间是可以公开发现或从您选择的 Virtual Private Cloud (VPC) 内发现的逻辑服务组。此外,您还可以使用您通过 ECS 服务发现功能创建的现有 DNS 命名空间。创建命名空间:


Bash


$ aws servicediscovery create-private-dns-namespace --name "external-dns-test.internal" –vpc “your-vpc-id”
复制代码


验证命名空间创建成功或找到现有的命名空间:


Bash


$ aws servicediscovery list-namespaces
复制代码


第 3 步:部署 ExternalDNS

ExternalDNS 会使用 Route 53 等 DNS 提供商同步暴露的 Kubernetes 服务和 Ingress。从而让您可以通过 Kubernetes 资源动态控制 DNS 记录。将“kubectl”客户端连接到您希望测试 ExternalDNS 的集群。然后执行如下的 YAML 清单文件“nginx-deployment.yaml”以部署 ExternalDNS。


YAML


apiVersion: v1kind: Servicemetadata:  name: nginx  annotations:    external-dns.alpha.kubernetes.io/hostname: nginx.external-dns-test.internalspec:  type: LoadBalancer  ports:  - port: 80    name: http    targetPort: 80  selector:    app: nginx---apiVersion: extensions/v1beta1kind: Deploymentmetadata:  name: nginxspec:  template:    metadata:      labels:        app: nginx    spec:      containers:      - image: nginx        name: nginx        ports:        - containerPort: 80          name: http
复制代码


应用如下清单以部署 ExternalDNS:


Bash


$ kubectl apply -f nginx-deployment.yaml
复制代码


一分钟后,请确认服务对应的 DNS 记录已经在托管区域内创建。您可以使用 Amazon Route53 控制台来完成此项操作。此外,您可以通过从 VPC 调用来直接连接到 nginx 服务:


Bash


nginx.external-dns-test.internal
复制代码


开始将 Kubernetes 和 Amazon ECS 结合使用

现在,在 Amazon ECS 集群和 Kubernetes 集群中运行的应用程序可以共享同一个命名空间(例如 example.com)并通过 DNS 查询相互发现对方。在任何一个集群中创建的所有新服务都将自动在同一命名空间中提供,因此您可以通过添加在 Kubernetes 中运行的组件,无缝扩展在 Amazon ECS 中运行的应用程序。如要开始使用,请为您在 Kubernetes 中运行的服务部署最新版本的 ExternalDNS 连接器并为您在 Amazon ECS 中运行的服务部署 ECS 服务发现功能。更多信息请参阅文档


本文转载自 AWS 技术博客。


原文链接:


https://amazonaws-china.com/cn/blogs/china/unified-service-discovery-ecs-kubernetes/


2019-10-21 08:00372

评论

发布
暂无评论
发现更多内容

Leetcode 题目解析:287. 寻找重复数

程序员架构进阶

算法 LeetCode 10月日更

架构实战营 - 模块五作业

Alex.Wu

在线最大公因数计算器

入门小站

工具

架构实战营 - 模块五作业

en

#架构实战营

区块链与智能革命的未来

CECBC

【Flutter 专题】29 图解自定义底部状态栏 ACEBottomNavigationBar (一)

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 10月日更

听首歌的时间,简单复习下 python 网络编程之 socket,美不美?滚雪球学python第4季14篇

梦想橡皮擦

10月日更

阿里P8高级架构师开发高并发系统经验总结

Java 程序员 架构 面试 后端

图解分布式之:最终一致性,一致只会迟到,但绝不缺席

普普通通程序员

SpringBoot 实战:JUnit5+MockMvc+Mockito 做好单元测试

看山

Java Spring Boot 10月日更 Effective Spring

绿色电力交易是一场迫在眉睫,区块链记录每一笔绿色电力交易

CECBC

千万级学生管理系统的考试试卷存储方案

刘琦Logan

架构实战营_模块六作业_拆分电商系统为微服务

Rabbit

生命中不重要的九件事情

石云升

10月日更

ThreadPoolExecutor学习笔记

六维

ThreadPoolExecutor 10月日更

《第2章 开始学习C++》

IT蜗壳-Tango

10月日更

CSS架构之Acss层

Augus

CSS 10月日更

深入理解Java虚拟机之JVM内存布局篇

普普通通程序员

【Android构建新工具】Bazel构建工具介绍

轻口味

android 构建工具 10月日更

为何实现碳中和已刻不容缓?

CECBC

微博评论高性能高可用计算架构

刘琦Logan

链路层的封装成帧和透明传输基本问题

Regan Yue

计算机网络 10月日更

016云原生之安全技术

穿过生命散发芬芳

云原生 10月日更

架构实战营模块5课后作业

apple

每个数据工程师都应该知道的 6 个 SQL 查询

云原生

sql 职业生涯 数据工程师

Vue进阶(幺叁陆):el-steps 实现页面内导航

No Silver Bullet

Vue 10月日更

【LeetCode】 山峰数组的顶部Java题解

Albert

算法 LeetCode 10月日更

Go 中 Nil 理论上有类型,实践中无类型

baiyutang

golang 10月日更

Mock Service Worker:可用于浏览器的Mock服务

devpoint

Vue Mock 10月日更 msw

linux之sudo使用技巧汇总

入门小站

Linux

【Vuex 源码学习】第十三篇 - Vuex 辅助函数的实现

Brave

源码 vuex 10月日更

OpenSource ,开始将 Kubernetes 和 Amazon ECS 结合使用_语言 & 开发_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章