本文介绍容器服务Swarm集群相关的网络配置类标签。

Swarm标签名 Swarm标签含义 对应 Kubernetes配置方案 Swarm配置示例 Kubernetes配置示例 如何迁移
net V1 版compose文件格式,设置网络模式,同docker命令行参数--net;参见net 部分值,可以直接转换,部分值在 Kubernetes不支持定制,其中:net: host可直接转换为hostNetwork: true,其余值在Kubernetes里面不支持。参见Host namespaces 请参见net的Swarm配置示例。 请参见net的Kubernetes配置示例。

手动迁移:

kompose转换后,需要手动修改不支持的资源配置。

aliyun.routing.port_
  • Swarm简单路由,用于设置该服务的访问域名并支持多域名设置,参见routing
  • Swarm简单路由,当设置了.local后缀域名时,仅用于集群内服务间路由和负载均衡,参见集群内服务间路由和负载均衡
对应Kubernetes ingress,但 kompose工具支持部分转换,但转换过程只支持转换第一个域名,后续域名规则需人工添加,且针对测试域名需要人工替换。参见Ingress 支持 请参见aliyun.routing.port_的Swarm配置示例。 请参见aliyun.routing.port_的Kubernetes配置示例。

kompose自动迁移或手动修复。

手动修复:
  • 普通域名:kompose转换后,需要手动修改Kubernetes资源文件,找到Kubernetes对应ingress资源文件*-ingress.yaml
    • 将其中的host: your-cluster-id.alicontainer.com修改成对应Kubernetes 集群的测试域名,其中,k8s-piggymetrics-cluster示例的测试域名为*.c7f537c92438f415b943e7c2f8ca30b3b.cn-zhangjiakou.alicontainer.com;将其替换到各个ingress文件的.your-cluster-id.alicontainer.com字符串。
    • 针对分号后面的第二个域名,需要自己在 ingress文件里面添加rule规则。
  • .local域名:
    • 部署Kubernetes文件后完成。
    • 手动到控制台创建Service。如果是.local域名,在Swarm里面只有集群内可以访问且不用带端口,而Kubernetes Service名只支持小写和中划线-,不支持.local这类带.字符的服务名。在迁移Kubernetes时,只能修改应用代码适配。
aliyun.routing.session_sticky 设置routing在做请求路由的时候,是否保持session sticky,即会话保持。
说明 此标签必须和 routing 配合使用,单独使用无效。
Kubernetes不支持,迁移忽略。 无法迁移。
hostname 可用作跨Node容器间访问(基于DNS+LB),常用于跨服务访问。 转换成service的方式,实现跨容器访问;参见创建服务 请参见hostname的Swarm配置示例。 请参见hostname的Kubernetes配置示例。
手动迁移:
  1. 先部署Kubernetes资源文件。
  2. 然后从控制台界面创建Service(cluster IP)。由于在Swarm 编排文件里面不知道容器对应端口,因此无法通过 kompose工具自动转换。
说明 由于Kubernetes Service名只支持小写和中划线-。如果hostname、links、external_links等带有其它字符如.local这类带.字符的,迁移Kubernetes时,只能修改应用代码适配。
links
  1. 通过服务名或别名访问跨主机容器组。
  2. 跟depends on类似,决定启动顺序。
  1. 基于服务名和别名,分别创建service 的方式,实现跨容器访问;参见创建服务
  2. 启动顺序依赖,需要根据业务特点处理。
请参见links的Swarm配置示例。 请参见links的Kubernetes配置示例。
external_links 将两个服务链接起来,使之可以通信;其相对links标签来说,支持链接到其它编排文件或其它方式创建的容器。

Kubernetes只支持通过service方式来实现跨容器访问;且 service对应的后端容器必须由Kubernetes管理。

迁移方案:
  1. 被external_links链接的容器通过Kubernetes 集群创建和管理。
  2. 基于服务名和别名,分别创建service 的方式,实现跨容器访问。参见创建服务
请参见external_links的Swarm配置示例。 请参见external_links的Kubernetes配置示例。
external:
     host: $RDS_URL
     ports:
       - 3306
设置该服务直接链接到外部地址。
  • host:设置链接的域名。
  • ports:设置链接的端口。
对应Kubernetes的headless service,参见Headless services 请参见external:***的Swarm配置示例。 请参见external:***的Kubernetes配置示例。
手动迁移:
  1. kompose转换前删除配置,避免中断转换流程。
  2. kompose 转换后,手动编写headless service(ExternalName类型)资源文件。
  3. 跟其它资源文件,一起通过kubectl部署。
aliyun.lb.port_* 通过自定义阿里云负载均衡 na映射的方式来暴露服务端口到公网或者到内网。参见负载均衡路由 通过LoadBalancer(类似于Swarm集群的负载均衡)访问服务。参见通过负载均衡(Server Load Balancer)访问服务 请参见aliyun.lb.port_*的Swarm配置示例。 请参见aliyun.lb.port_*的Kubernetes配置示例。

手动迁移:

部署后,通过Kubernetes LoadBalancer(类似于Swarm集群的负载均衡)访问服务。参见通过负载均衡(Server Load Balancer)访问服务
说明
  • 这里仅做示例,需要客户结合业务需要按Kubernetes文档操作。
  • 一经挂载到SLB就有可能触发生产流量进入,建议先挂载到测试端口完成测试,再挂载到正式端口。
dns 指定容器上游DNS服务器 对应Kubernetes的Pod级别的DNS配置,详细参见Pod’s DNS Config
说明 如果指定了 DNS,则对应的Service名称的解析可能会失效。
请参见dns的Swarm配置示例。 请参见dns的Kubernetes配置示例。

手动迁移:

kompose转换后,修改该应用对应资源文件*-deployment.yaml,添加 dnsConfig配置。

net

Swarm配置示例 Kubernetes配置示例
net net

详细配置,请参见logtail2-daemonset.yaml

aliyun.routing.port_

Swarm配置示例 Kubernetes配置示例
aliyun.routing.port_ aliyun.routing.port_

详细配置,请参见 gateway-ingress.yaml

hostname

Swarm配置示例 Kubernetes配置示例
hostname hostname
说明 通过控制台创建一个同名(标注1)的service用于服务访问,服务端口为容器端口。

links

Swarm配置示例 Kubernetes配置示例
links links
说明 通过控制台分别创建一个同名的service用于服务访问。

external_links

Swarm配置示例 Kubernetes配置示例
external_links external_links
说明 通过控制台创建一个同名的service用于服务访问。

external_links

Swarm配置示例 Kubernetes配置示例
external_links external_links
说明 通过控制台创建一个同名的service用于服务访问。

external:***

external:***标签的全部显示如下。

external:
     host: $RDS_URL
     ports:
       - 3306
Swarm配置示例 Kubernetes配置示例
external: external:

详细配置,请参见account-db-service.yaml

aliyun.lb.port_*

Swarm配置示例 Kubernetes配置示例
aliyun.lb.port_* aliyun.lb.port_*

dns

Swarm配置示例 Kubernetes配置示例
dns dns

详细配置,请参见logtail2-daemonset.yaml