前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >TKE容器服务​创建ingress

TKE容器服务​创建ingress

原创
作者头像
马凌鑫
修改2018-10-12 18:31:06
2.2K0
修改2018-10-12 18:31:06
举报
文章被收录于专栏:云知识学习云知识学习

这里会讲述通过控制台和命令行创建ingress

术语

ingress:通俗的理解是:通过7层负载均衡转发对应url到对应的path中,实现准确转发流量目的。

clb:腾讯云负载均衡,这里有4层负载均衡(传统lb)和7层负载均衡(应用lb)

什么是Ingress?

这里引用k8s的例子说明:

Ingress是一组规则,允许入站连接到达群集服务。

代码语言:txt
复制
    internet
        |
   [ Ingress ]
   --|-----|--
   [ Services ]

公网访问 ingress

ingress转发流量到对应的Service

作用:你可以给Ingress配置提供外部可访问的URL、负载均衡、SSL、基于名称的虚拟主机等。用户通过POST Ingress资源到API server的方式来请求ingress。 Ingress controller负责实现Ingress,通常使用负载平衡器,它还可以配置边界路由和其他前端,这有助于以HA方式处理流量。

先决条件(知会即可)

在使用ingress前需要Ingress Controller来实现Ingress

如果没有ingress Controller,单纯创建ingress是无效的。

TKE会在节点上部署一个ingress controller,所以这个环节可以忽略,知会即可,这是使用ingress的前提条件。

ingress 配置

http的ingress创建 最简化配置如下:

代码语言:txt
复制
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: test-ingress
spec:
  rules:
  - host: www.lingxin.site
    http:
      paths:
      - path: /
        backend:
          serviceName: nginx
          servicePort: 80

1-4行:跟Kubernetes的其他配置一样,ingress的配置也需要apiVersion,kind和metadata字段。配置文件的详细说明请查看部署应用, 配置容器和 使用resources.

5-7行: spec中包含配置一个loadbalancer或proxy server的所有信息。最重要的是,它包含了一个匹配所有入站请求的规则列表。

8-9行:每条http规则包含以下信息:一个host配置项(比如www.lingxin.site,如果不填写host则是*,不推荐不填写),path列表(比如:/),每个path都关联一个backend(比如nginx :80)。在loadbalancer将流量转发到backend之前,所有的入站请求都要先匹配host和path。

10-12行:正如services doc中描述的那样,backend是一个service:port的组合。Ingress的流量被转发到它所匹配的backend。

host: 域名信息

path: 指定的访问路径,这里我设置为 /

serviceName:对应的service name

servicePort:端口

创建

复制上面的yaml 然后创建

代码语言:txt
复制
$ kubectl create -f ingress.yaml
ingress.extensions "test-ingress" created

使用kubectl create -f命令创建,然后查看ingress:

代码语言:txt
复制
$ kubectl get ing
NAME           HOSTS              ADDRESS           PORTS     AGE
test-ingress   www.lingxin.site   134.175.254.100   80        1m

134.175.254.100就是ingress controller为了实现Ingress而分配的IP地址(这里是联动了clb的)

image.png
image.png

创建http的到此结束,接下来讲如何手动创建https的ingress

TLS

你可以通过指定包含TLS私钥和证书的secret来加密Ingress。目前,Ingress仅支持单个TLS端口443

1.在clbORTKE的控制台中申请证书

image.png
image.png

这里请按个人需求申请证书

image.png
image.png

SSL证书格式要求及格式转换说明

2.在控制台选中对应的https证书并且创建ingress

image.png
image.png

效果图:

image.png
image.png

查看ingress

代码语言:txt
复制
$ kubectl get ingress
NAME                 HOSTS              ADDRESS           PORTS     AGE
https-ingress-test   localhost          134.175.254.220   80, 443   1m

在port 中可以看到443端口

实现过程:

1.创建https的ingress 需要有tls的secret,我们在控制台中选中https证书,创建ingress时,会先创建一个secret然后在创建ingress引用对应的sercret

代码语言:txt
复制
$ kubectl get secret
NAME                  TYPE                                  DATA      AGE
https-ingress-test    Opaque                                1         4m

secret的具体申明

代码语言:txt
复制
$ kubectl get secret https-ingress-test -o yaml
apiVersion: v1
data:
  qcloud_cert_id: Tnd3eHJTM2k=
kind: Secret
metadata:
  creationTimestamp: 2018-10-12T10:00:07Z
  name: https-ingress-test
  namespace: default
  resourceVersion: "45966538468"
  selfLink: /api/v1/namespaces/default/secrets/https-ingress-test
  uid: 98e6951e-ce05-11e8-984e-52540008e6f8
type: Opaque

2.查看 ingress 的 yaml文件

代码语言:txt
复制
$ kubectl get ingress  https-ingress-test -o yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    description: 创建https ingress
    kubernetes.io/ingress.class: qcloud
    kubernetes.io/ingress.http-rules: '[{"host":"localhost","path":"/","backend":{"serviceName":"non-service","servicePort":65535}}]'
    kubernetes.io/ingress.https-rules: "null"
    kubernetes.io/ingress.internetChargeType: BANDWIDTH_POSTPAID_BY_HOUR
    kubernetes.io/ingress.internetMaxBandwidthOut: "1"
    kubernetes.io/ingress.qcloud-loadbalance-id: lb-jgalbq0z
    kubernetes.io/ingress.rule-mix: "true"
    qcloud_cert_id: NwwxrS3i
    random: "8847762025636723283"
  creationTimestamp: 2018-10-12T10:00:07Z
  generation: 1
  name: https-ingress-test
  namespace: default
  resourceVersion: "45966587642"
  selfLink: /apis/extensions/v1beta1/namespaces/default/ingresses/https-ingress-test
  uid: 98eb880a-ce05-11e8-984e-52540008e6f8
spec:
  rules:
  - host: localhost
    http:
      paths:
      - backend:
          serviceName: non-service
          servicePort: 65535
        path: /
  tls:
  - secretName: https-ingress-test
status:
  loadBalancer:
    ingress:
    - ip: 134.175.254.220

到此 对https的ingress应有一个大体上的了解。

由于通过控制台创建的ingress没有配置对应的转发规则,所以这里server默认都是non-service端口65535

在控制台创建规则后 ingress会有对应的修改。

image.png
image.png
代码语言:txt
复制
$ kubectl get  ing https-ingress-test -o yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    description: 创建https ingress
    kubernetes.io/ingress.class: qcloud
    kubernetes.io/ingress.http-rules: "null"
    kubernetes.io/ingress.https-rules: '[{"host":"www.lingxin.xyz","path":"/","backend":{"serviceName":"nginx","servicePort":80}}]'
    kubernetes.io/ingress.internetChargeType: BANDWIDTH_POSTPAID_BY_HOUR
    kubernetes.io/ingress.internetMaxBandwidthOut: "1"
    kubernetes.io/ingress.qcloud-loadbalance-id: lb-jgalbq0z
    kubernetes.io/ingress.rule-mix: "true"
    qcloud_cert_id: NwwxrS3i
    random: "632049962850261178"
  creationTimestamp: 2018-10-12T10:00:07Z
  generation: 2
  name: https-ingress-test
  namespace: default
  resourceVersion: "45968157271"
  selfLink: /apis/extensions/v1beta1/namespaces/default/ingresses/https-ingress-test
  uid: 98eb880a-ce05-11e8-984e-52540008e6f8
spec:
  rules:
  - host: www.lingxin.xyz
    http:
      paths:
      - backend:
          serviceName: nginx
          servicePort: 80
        path: /
  tls:
  - secretName: https-ingress-test
status:
  loadBalancer:
    ingress:
    - ip: 134.175.254.220

到此 https 的ingress已实现,如想通过命令行创建https思路如下

1.创建对应的secret

2.在ingress的yaml中填上qcloud_cert_id:证书ID

这里不同于k8s官网的实现细节。所以通过控制台创建https的ingress是最好的。

k8s ingress 官网地址

不管如何了解底层的知识后,还是用控制台创建是最佳的选择。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 术语
  • 什么是Ingress?
  • 先决条件(知会即可)
  • ingress 配置
  • 创建
  • TLS
相关产品与服务
负载均衡
负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档