路由服务常见问题
更新时间:2019-11-04 11:48:14
Q:我想简单体验下容器服务,部署一个 web 容器,且能够访问,有示例吗? A:有,示例包括 通过镜像创建 Nginx,通过编排模板创建 WordPress,示例指导您如何简单快速地部署应用。 Q:如何使用 routing 服务? A:参见示例 通过 acsrouting 路由应用暴露 HTTP 服务。 Q:如何使用 routing 标签? A:参见服务编排文档 标签概览。 Q:我部署了一个 web 类型容器,如何能够访问到这个容器里面的内容? A:容器技术没有黑魔法,一个容器就是一个或者一组进程,进程需要暴露端口,用户才能访问到容器里面的内容。容器抽象出了容器的端口,与主机的端口相映射。我们可以通过访问与容器映射了的主机端口访问到容器。 Q:为了做到高可用,我们会使用多个相同功能的容器,只提供一个访问的端点,这在容器服务中是如何做到的呢? A:如下图所示,我们提供了一个 routing 服务(通过
Q:如何给暴露公网的服务添加域名,并支持 HTTP 协议? A:参见链接 给暴露公网的服务添加域名。 Q:如何将 HTTP 协议转换成 HTTPS 协议? A:参见链接 将暴露的 HTTP 服务修改为 HTTPS 服务。 Q:如何将 HTTP 请求跳转为 HTTPS 请求? A:首先我们要区分请求的协议是 HTTP 还是 HTTPS。如果是 HTTP 协议,则通过 301 或者 302 跳转到 HTTPS。但是当 HTTP 请求和 HTTPS 请求分别通过负载均衡的 80 和 443 端口转发到后端相同的端口(例如 9080 端口)时,后端的容器是没有办法区分该请求的协议是 HTTP 还是 HTTPS 协议的。解决的办法是,通过额外暴露一个端口(例如 8080 端口)将 HTTP 的请求走如下链路:负载均衡前端 80 端口 > 节点主机 vm8080 端口 > 专门用作跳转处理的容器,例如 Nginx 80 端口 > 返回 302 跳转。 Q:为什么负载均衡 HTTP 协议的端口显示异常? A:负载均衡的 HTTP 协议端口健康检查失败,就会显示异常。健康检查的原理很简单,就是发送一个 HTTP 的 HEAD 请求(与 GET 请求类似,但是只需要返回响应头即可),用户需要配置 HTTP 请求的域名,默认是 IP,如果请求返回 200,负载均衡才认为健康检查是正常的。检查办法是绕过负载均衡,直接在您的主机节点上通过 curl 命令探测请求是否正确返回 200。 Q:为什么负载均衡 HTTPS 协议的端口显示异常? A:负载均衡的 HTTPS 协议端口健康检查失败,就会显示异常。健康检查的原理很简单,就是发送一个 HTTP 的 HEAD 请求(与 GET 请求类似,但是只需要返回响应头即可),用户需要配置 HTTP 请求的域名,默认是 IP,如果请求返回 200,负载均衡才认为健康检查是正常的。用户如果配置的是 HTTPS 协议端口,请注意一定要在配置健康检查的时候配置请求的域名,否则默认健康检查是会失败的(默认配置的 IP 请求到 routing 容器,routing 容器不知道该转发到哪个后端,返回 503 报错)。检查办法是绕过负载均衡,直接在您的主机节点上通过 curl 命令探测请求是否正确返回 200,如果没有返回,请检查应用的正确性。 Q:集群是否支持绑定内网负载均衡,是否支持解绑? A:集群支持绑定至多一个负载均衡实例,同时支持解绑定,参见 为集群绑定和解绑负载均衡。 Q:集群支持绑定多个集群级别的负载均衡吗? A:目前不支持。用户可以通过手动创建负载均衡绑定到集群节点的 9080 端口,当节点伸缩扩容时,用户需要自己维护自己创建的负载均衡的后端服务器,例如添加或者减少后端服务器。 Q:同一个集群内,容器和容器之间如何通信? A:同一个集群内,容器访问另外一个容器,可以直接使用容器名当作内部域名进行访问。 Q: 同一个集群内,容器和容器之间如何进行服务发现和负载均衡? A:通过路由服务代理进行转发和发现。参见示例 基于容器服务实现 Docker 微服务间的负载均衡和自动服务发现的方法。 Q:路由服务访问链路的问题,如何排查? A:排查方法参见 访问链路问题排查。 Q:既可以通过应用模板的 A:本质是一样的。通过应用模板的 Q: 我希望对负载均衡做更多的配置,默认的路由服务不支持,怎么办? A:我们提供了一个自定义代理的镜像 registry.aliyuncs.com/acs/proxy,该镜像的底层实现是 HAProxy,支持对 HAProxy 各种定义的参数化配置,同时支持动态的服务发现,即根据服务的健康状况,正确地路由到健康的容器中。 Q:使用简单路由后,如何获取客户端的来源真实 IP? A:所有经过简单路由的请求,都会在请求的 request header 中加入 x-forwarded-for。
说明 该 header 可能会有多行,需要获取多行中第一行的 x-forwarded-for 来拿到客户端真实 IP。
aliyun.routing.port_$container_port
进行简单路由配置,也可以通过服务的变更配置进行简单路由配置,区别是什么?aliyun.routing.port_$container_port
进行简单路由配置会反映在服务的 变更配置 的 web 路由规则上,但是反过来则不会。通过服务的 变更配置 进行简单路由配置,只是便于用户在控制台使用,同时方便错误检查和校验。其实现也就是把这个表单变成应用模板的一个 label,然后再去更新服务的配置。 x-forwarded-for: <客户端来源 IP>
x-forwarded-for: <中间代理的 IP>
相关文档
相关产品
-
容器服务(已停止服务)
容器服务(Container Service)提供了高性能可伸缩的容器应用管理服务,支持在一组云服务器上通过 Docker 容器来进行应用生命周期管理。容器服务极大地简化了用户对容器管理集群的搭建工作,无缝整合了阿里云虚拟化、存储、网络和安全能力,打造 Docker 云端最优化的运行环境。容器服务提供了多种应用发布方式和流水线般的持续交付能力,原生支持微服务架构,助力用户无缝上云和跨云管理。
-
容器服务Kubernetes版
容器服务Kubernetes版(Container Service for Kubernetes)提供高性能可伸缩的容器应用管理服务,支持企业级Kubernetes容器化应用的生命周期管理。
-
容器镜像服务
容器镜像服务(Container Registry)提供安全的应用镜像托管能力,精确的镜像安全扫描功能,稳定的国内外镜像构建服务,便捷的镜像授权功能,方便用户进行镜像全生命周期管理。容器镜像服务简化了Registry的搭建运维工作,支持多地域的镜像托管,并联合容器服务等云产品,打造云上使用Docker的一体化体验。
以上内容是否对您有帮助?
在文档使用中是否遇到以下问题
-
内容错误
-
更新不及时
-
链接错误
-
缺少代码/图片示例
-
太简单/步骤待完善
-
其他
-
内容错误
-
更新不及时
-
链接错误
-
缺少代码/图片示例
-
太简单/步骤待完善
-
其他
更多建议
匿名提交感谢您的打分,是否有意见建议想告诉我们?
感谢您的反馈,反馈我们已经收到
文档反馈
鼠标选中内容,快速选择问题
选中存在疑惑的文档内容,即可生成 截图进行反馈,我们会跟进处理。
文档反馈