TKE容器服务​创建ingress

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

术语

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

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

什么是Ingress?

这里引用k8s的例子说明:

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

    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创建 最简化配置如下:

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 然后创建

$ kubectl create -f ingress.yaml
ingress.extensions "test-ingress" created

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

$ 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

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

TLS

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

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

image.png

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

image.png

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

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

image.png

效果图:

image.png

查看ingress

$ 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

$ kubectl get secret
NAME                  TYPE                                  DATA      AGE
https-ingress-test    Opaque                                1         4m

secret的具体申明

$ 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文件

$ 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
$ 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 官网地址

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

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

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

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏KaliArch

Python构建私有代理IP库

至此我们就利用Python构建了一个属于自己的私有代理库,在进行爬去的时候可方便从数据库中获取使用。

2878
来自专栏从零开始的linux

分布式文件系统 fastdfs

fastdfs FastDFS是一款开源的轻量级分布式文件系统纯C实现,支持Linux、FreeBSD等UNIX系统类google FS,不是通用的文件系统,只...

6706
来自专栏编程坑太多

Python构建私有代理IP库

2868
来自专栏KaliArch

Python构建私有代理IP库

至此我们就利用Python构建了一个属于自己的私有代理库,在进行爬去的时候可方便从数据库中获取使用。

6627
来自专栏云知识学习

Kubernetes 的服务发现与负载均衡(Service)

Service通常会和Deployment结合在一起使用,首先通过Deployment部署应用程序,然后再使用 Service 为应用程序提供服务发现、负载均衡...

6152
来自专栏云计算

如何在Ubuntu上使用Jenkins自动构建

Jenkins是一个开源自动化服务器,允许您构建管道以自动化构建,测试和部署应用程序的过程。在本指南中,您将实施基本工作流程,以加快持续集成和持续交付(CI /...

3291
来自专栏老安的博客

openstack octavia 简介以及手工安装过程

1.1K3
来自专栏一只程序汪的自我修养

每周开源项目分享-年轻人的第一个OAuth2.0 Server:hydra

文档地址:https://www.ory.sh/docs/guides/master/hydra/

2972
来自专栏王磊的博客

Spring Boot (八)MyBatis + Docker + MongoDB 4.x

MongoDB是一个强大、灵活,且易于扩展的通用型数据库。MongoDB是C++编写的文档型数据库,有着丰富的关系型数据库的功能,并在4.0之后添加了事务支持。

1842
来自专栏北京马哥教育

lamp平台 php解析器基于模块和php-fpm

首先,我先介绍一下实验环境: http服务器:192.168.236.128(php解析器基于modules) mysql服务器:192.168.236.129...

3528

扫码关注云+社区

领取腾讯云代金券