全部产品
存储与CDN 数据库 安全 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网
容器服务

Ingress 支持

更新时间:2017-11-14 23:57:46

Ingress 为您提供七层负载均衡能力,通过 ROS 模板安装的 Kubernetes 高可用集群默认支持 Ingress。系统安装时默认创建了一个名字为http-svc的测试服务。

前置条件

为了测试复杂路由服务,您需要事先创建多个Service,用来观察路由的效果,简单起见,这里统一复用http-svc服务。实际测试请替换成自己的服务。

  1. root@master # kubectl expose deploy nginx --name=http-svc1 --port=80 --target-port=80
  2. root@master # kubectl expose deploy nginx --name=http-svc2 --port=80 --target-port=80
  3. root@master # kubectl expose deploy nginx --name=http-svc3 --port=80 --target-port=80

简单的路由服务

通过以下命令创建一个简单的 Ingress,所有对 /svc 路径的访问都会被路由到名为 http-svc 的服务。rewrite-target: "/"会将/svc路径重定向到后端服务能够识别的/路径上面。

  1. root@master # cat <<EOF | kubectl create -f -
  2. apiVersion: extensions/v1beta1
  3. kind: Ingress
  4. metadata:
  5. name: simple
  6. annotations:
  7. rewrite-target: "/"
  8. spec:
  9. rules:
  10. - http:
  11. paths:
  12. - path: /svc
  13. backend:
  14. serviceName: http-svc
  15. servicePort: 80
  16. EOF
  17. root@master # kubectl get ing
  18. NAME HOSTS ADDRESS PORTS AGE
  19. simple * 101.37.192.211 80 11s

现在访问 http://101.37.192.211/svc 即可访问到 Nginx 服务。

基于域名的简单扇出路由

如果您有多个域名对外提供不同的服务,您可以生成如下的配置达到一个简单的基于域名的扇出效果。

  1. root@master # cat <<EOF | kubectl create -f -
  2. apiVersion: extensions/v1beta1
  3. kind: Ingress
  4. metadata:
  5. name: simple-fanout
  6. spec:
  7. rules:
  8. - host: foo.bar.com
  9. http:
  10. paths:
  11. - path: /foo
  12. backend:
  13. serviceName: http-svc1
  14. servicePort: 80
  15. - path: /bar
  16. backend:
  17. serviceName: http-svc2
  18. servicePort: 80
  19. - host: foo.example.com
  20. http:
  21. paths:
  22. - path: /film
  23. backend:
  24. serviceName: http-svc3
  25. servicePort: 80
  26. EOF
  27. root@master # kubectl get ing
  28. NAME HOSTS ADDRESS PORTS AGE
  29. simple-fanout * 101.37.192.211 80 11s

这时您可以通过 http://foo.bar.com/foo 访问到 http-svc1 服务;通过 http://foo.bar.com/bar 访问到 http-svc2 服务;通过 http://foo.example.com/film 访问到 http-svc3 服务。

注意:

  • 如果是生产环境,您需要将您的这个域名指向上面返回的 ADDRESS 101.37.192.211
  • 如果是测试环境测试,您可以修改 hosts 文件添加一条域名映射规则。
    1. 101.37.192.211 foo.bar.com
    2. 101.37.192.211 foo.example.com

配置安全的路由服务

支持多证书管理,为您的服务提供安全防护。

  1. 准备您的服务证书。

    如果没有证书,可以通过下面的方法生成测试证书。

    注意:域名与您的 Ingress 配置要一致。

    1. root@master # openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=foo.bar.com/O=foo.bar.com"

    上面命令会生成一个证书文件 tls.crt、一个私钥文件 tls.key

    然后用该证书和私钥创建一个名为 foo.bar 的 Kubernetes Secret。创建 Ingress 时需要引用这个 Secret。

    1. root@master # kubectl create secret tls foo.bar --key tls.key --cert tls.crt
  2. 创建一个安全的 Ingress 服务。

    1. root@master # cat <<EOF | kubectl create -f -
    2. apiVersion: extensions/v1beta1
    3. kind: Ingress
    4. metadata:
    5. name: tls-fanout
    6. spec:
    7. tls:
    8. - hosts:
    9. - foo.bar.com
    10. secretName: foo.bar
    11. rules:
    12. - host: foo.bar.com
    13. http:
    14. paths:
    15. - path: /foo
    16. backend:
    17. serviceName: http-svc1
    18. servicePort: 80
    19. - path: /bar
    20. backend:
    21. serviceName: http-svc2
    22. servicePort: 80
    23. EOF
    24. root@master # kubectl get ing
    25. NAME HOSTS ADDRESS PORTS AGE
    26. tls-fanout * 101.37.192.211 80 11s
  3. 按照 基于域名的简单扇出路由 中的注意事项,配置 hosts 文件或者设置域名来访问该 tls 服务。

    您可以通过 http://foo.bar.com/foo 访问到 http-svc1 服务;通过 http://foo.bar.com/bar 访问到 http-svc2 服务。

    您也可以通过 HTTP 的方式访问该 HTTPS 的服务。Ingress 默认对配置了 HTTPS 的 HTTP 访问重定向到 HTTPS 上面。所以访问 http://foo.bar.com/foo 会被自动重定向到 https://foo.bar.com/foo

通过 Kubernetes Web UI 部署 Ingress

  1. 将下面的 yml code 保存到 nginx-ingress.yml 文件中。

    1. apiVersion: extensions/v1beta1
    2. kind: Ingress
    3. metadata:
    4. name: simple
    5. spec:
    6. rules:
    7. - http:
    8. paths:
    9. - path: /svc
    10. backend:
    11. serviceName: http-svc
    12. servicePort: 80
  2. 登录 Kubernetes Web UI。

    有关如何访问 Kubernetes Web UI,参见 访问 Kubernetes Web UI

  3. 单击 CREATE 创建应用。

  4. 单击 Upload a YAML or JSON file。选择刚才保存的 nginx-svc.yml 文件

  5. 单击 DEPLOY

    这样就创建了一个 Ingress 的七层代理路由到 http-svc 服务上。

  6. 在 Kubernetes Web UI 上定位到 default 命名空间,选择 Ingress 资源。

    可以看到您刚刚创建的 Ingress 资源及其访问地址 http://101.37.178.224/svc

    eadc0bd549102092.png

  7. 打开浏览器输入该地址即可访问刚刚创建的 http-svc 服务。

本文导读目录