Traefk配置https域名详解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Traefk配置https域名详解相关的知识,希望对你有一定的参考价值。

参考技术A 这里提示一下: 前端入口代理为后端Service的Service

问:ingress里的service是哪个service,怎么写

答:还是以下面这个对象为例,可以看到,这个service写的是traefikminio,实际上也就是minio的pod的部署svc yaml里的service的名字,也就是minio-svc.yaml这个定义Service kind类型为Service的metadata下面name的名字,端口实际上就是你想让此条ingress规则代理的域名被转发到service所对应的pod的哪个端口上,这也就解释了为什么即使是https的时候这个地方写的仍然是8080端口,因为此规则的entryPoints字段的websecure才是流量入口,而8080是实际访问的地址

cd /root/hero/app/yaml/ingress/traefik-contrain-80-443/

mkdir ssl

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=tts.herotest.com.cn" #查看生成的两个文件

kubectl create secret tls https --cert=tls.crt --key=tls.key -n hpc #在hpc的命名空间里面设置secret

kubectl get secret -n hpc #查看hpc命名空间中发现https已经成功被创建了

前端代理配置如下:

[root@allinone traefik-contrain-80-443]# cat traefik-miniossl.yaml

apiVersion: traefik.containo.us/v1alpha1

kind: IngressRoute

metadata:

  name: miniossl

  namespace: hpc

spec:

  entryPoints:

    - websecure #前端入口: 名称要和traefik-deploy.yaml里面的ports下面的name名称要一致

  routes:

- match: Host(`tts.herotest.com.cn`) && PathPrefix(`/`)

    kind: Rule

    services:

    - name: traefikminio #要和后端minio-svc.yaml配置文件中的name字段一致 ,前端入口代理为后端Service的Service

      port: 9000

  tls:

    secretName: https

-----------------------------------

traefik-deploy文件配置如下,entrypoints定义了80和443的入口

[root@allinone traefik-contrain-80-443]# cat traefik-deploy.yaml

apiVersion: v1

kind: ServiceAccount

metadata:

  namespace: default

  name: traefik-ingress-controller

---

kind: Deployment

apiVersion: apps/v1

metadata:

  namespace: default

  name: traefik

  labels:

    app: traefik

spec:

  replicas: 2

  selector:

    matchLabels:

      app: traefik

  template:

    metadata:

      labels:

        app: traefik

    spec:

      serviceAccountName: traefik-ingress-controller

      containers:

        - name: traefik

          image: traefik:v2.0.2

          args:

            - --api.insecure

            - --accesslog

            - --entrypoints.web.Address=:80

            - --entrypoints.websecure.Address=:443

            - --providers.kubernetescrd

            - --certificatesresolvers.default.acme.tlschallenge

- --certificatesresolvers.default.acme.email=foo@you.com

            - --certificatesresolvers.default.acme.storage=acme.json

            # Please note that this is the staging Let's Encrypt server.

            # Once you get things working, you should remove that whole line altogether.

- --certificatesresolvers.default.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory

          ports:

            - name: web

              containerPort: 80

            - name: websecure

              containerPort: 443

            - name: admin

              containerPort: 8080

----------------------

[root@allinone minio3]# cat minio.yaml

apiVersion: apps/v1

kind: Deployment

metadata:

  name: traefikminio

  namespace: hpc

spec:

  replicas: 1

  selector:

    matchLabels:

app: traefikminio#标签选择器,后面minio-svc.yaml selector下面要配置app: traefikminio  serviceName: traefikminio

serviceName: traefikminio

  template:

    metadata:

      labels:

        app: traefikminio

        serviceName: traefikminio

    spec:

      containers:

      - name: traefikminio

        image: 172.88.19.131/hero/myminio-entry:v1

---------------------------

[root@allinone minio3]# cat minio-svc.yaml

apiVersion: v1

kind: Service

metadata:

name: traefikminio#这个name 在配置traefik-miniossl.yaml前端入口services下的name字段也要配置traefikminio 这个名称

  namespace: hpc

spec:

  ports:

  - name: traefikminio

    port: 9000

    protocol: TCP

    targetPort: 9000

  selector:

app: traefikminio  #通过标签选择器关联后端的一组pod

    serviceName: traefikminio  #通过标签选择器关联后端的一组pod

kubectl apply -f traefik-miniossl.yaml

kubectl get ingressroute -n hpc #发现miniossl IngressRoute前端代理名称已经在里面了

kubectl describe ingressroute miniossl -n hpc  #已经走https协议了

登陆traefik控制台查看,发现已经走https协议了,配置https域名成功

我们来打开浏览器通过https访问下域名上试试

在本机配置host

192.168.19.131 tts.herotest.com.cn

https://tts.herotest.com.cn:30443#成功访问

?DNS子域授权view配置详解

DNS子域授权、view配置详解

子域授权:其实就是将一个比较大的域再分割成小区域,每个小区域可以交由一组或多组服务器管理,这些服务器只解析其管辖范围内的域名,超出其范围的解析请求一般会转发给父域或直接转发给根域。子域是相对而言的,对于根来说顶级域名就是它的子域,依次类推,我们这里讲提到的子域授权是针对二级域名来说的,也就是三级域名授权。

       正向区域的子域授权:使用胶水记录(glue record),也就是在父域中添加一条NS记录和一条A记录即可。如果客户端的请求超出子域的解析范文,那么我们就需要定义转发服务器。

     定义转发服务器:

                     注意:被转发的服务器需要能够为请求者做递归,否则,转发请求不予进行;

                     (1) 全部转发: 凡是对非本机所有负责解析的区域的请求,统统转发给指定的服务器;

                            Options {

                                   forward {first|only}

                                   fowwarders

                            }

                     (2) 区域转发:仅转发对特定的区域的请求至某服务器;

                            zone "ZONE_NAME" IN {

                                   type forward;

                                   forward {first|only}

                                   forwarders

                            }

配置子域授权:

1、在父DNS服务器的区域解析库中添加如下几条记录

[[email protected] named]# vim czcedu.com.zone

23 ops     IN      NS      ns1.ops

 24 ops     IN      NS      ns2.ops

 25 ns1.ops IN      A       192.168.1.107

 26 ns2.ops IN      A       192.168.1.108

       2、在子域DNS服务器的区域文件中添加子域定义

              [[email protected] ~]# vim /etc/named.rfc1912.zones

60 zone "ops.czcedu.com." IN {

 61         type master;

 62         file "ops.czcedu.com.zone";

 63 };

       3、编辑子域服务器的区域解析库文件

[[email protected] named]# vim ops.czcedu.com.zone

 

  1 $TTL 1d

  2 $ORIGIN ops.czcedu.com.

  3 @       IN      SOA     ns1.ops.czcedu.com.     admin.ops.czcedu.com. (

  4                         2015042701

  5                         1H

  6                         10M

  7                         1W

  8                         1D )

  9         IN      NS      ns1

 10         IN      NS      ns2

 11 ns1     IN      A       192.168.1.107

 12 ns2     IN      A       192.168.1.108

 13 www     IN      A       172.16.200.1

 14 mail    IN      CNAME   www

 15 ops.czcedu.com  A       192.168.1.107

 16 *       IN      A       192.168.1.107

[[email protected] named]# dig -t A www.ops.czcedu.com @192.168.1.107   #测试子域解析是否正确 这里在父域和子域解析都是正确的

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6 <<>> -t A www.ops.czcedu.com @192.168.1.107

;; global options: +cmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 31108

;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2

;; QUESTION SECTION:

;www.ops.czcedu.com.        IN   A

;; ANSWER SECTION:

www.ops.czcedu.com.  86400    IN   A     172.16.200.1

;; AUTHORITY SECTION:

ops.czcedu.com.           86400    IN   NS  ns1.ops.czcedu.com.

ops.czcedu.com.           86400    IN   NS  ns2.ops.czcedu.com.

;; ADDITIONAL SECTION:

ns1.ops.czcedu.com.    86400    IN   A     192.168.1.107

ns2.ops.czcedu.com.    86400    IN   A     192.168.1.108

;; Query time: 5 msec

;; SERVER: 192.168.1.107#53(192.168.1.107)

;; WHEN: Fri Apr 24 13:02:47 2015

;; MSG SIZE  rcvd: 120

       4、在子域服务器中添加转发服务器将对父域的解析请求转发给父域服务器

[[email protected] named]# vim /etc/named.conf

44 zone "czcedu.com" IN {

 45         type forward;

 46         forward only;

 47         forwarders { 192.168.1.108; };

 48 };

       5、测试解析父域成功

技术分享图片

     Bind中基础的安全相关的配置:

              acl: (访问控制列表)把一个或多个地址归并为一个集合,并通过一个统一的名称调用;

                     acl acl_name {

                            ip;

                            ip;

                            net/prelen;

                     };

                     示例:

                            acl mynet {

                                   172.16.0.0/16;

                            }

                     bind有四个内置的acl:

                            none: 没有一个主机;

                            any: 任意主机;

                            local: 本机;

                            localnet: 本机的IP同掩码运算后得到的网络地址

       Bind中的view实现:

       View的主要作用是将来自不同网络的主机分发到不同网段的服务器上,以提高访问速度降低服务器压力。就以我们国家情况为例,电信和网通用户之间的访问带宽是非常小的,但是它们内部的访问带宽却非常大,所以我们可以将对同一域名的访问通过DNS分发到不同的IP之上,那么就可以实现电信用户访问电信的服务器,联通用户访问联通的服务器,这甚至也是CDN(内容分发网络)的一种解决方法,但是CDN还可以实现将对同一域名的访问只解析到一个IP之上,但是拥有这个IP的服务器不做任何内容的反馈,只是将来自不同区域的IP调度到不同区域的缓存服务器上,这样可以实现高并发高速率的响应用户请求,后续的博客中也会提到。

       配置view:

1、 在DNS服务器中定义acl

技术分享图片

2、 定义区域文件view

[[email protected] named]# vim /etc/named.rfc1912.zones

13 view internel {    #定义内网访问策略

 14         match-clients { mynet; };

 15         allow-recursion { mynet; };  #仅允许内网做递归请求

 16

 17 zone "." IN {            #可以做递归请求的网段才需要根提示

 18         type hint;

 19         file "named.ca";

 20 };

 21

 22 zone "localhost.localdomain" IN {

 23         type master;

 24         file "named.localhost";

 25         allow-update { none; };

 26 };

 27

 28 zone "localhost" IN {

 29         type master;

 30         file "named.localhost";

 31         allow-update { none; };

 32 };

 33

 34 zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {

 35         type master;

 36         file "named.loopback";

 37         allow-update { none; };

 38 };

 39

 40 zone "1.0.0.127.in-addr.arpa" IN {

 41         type master;

 42         file "named.loopback";

 43         allow-update { none; };

 44 };

 45

 46 zone "0.in-addr.arpa" IN {

 47         type master;

 48         file "named.empty";

 49         allow-update { none; };

 50 };

62

 63 zone "czcedu.com." IN {

 64         type master;

 65         file "czcedu.com.zone";       #定义内网解析库文件

 66         allow-update { none; };

 67 };

74 };

 75

 76 view internet {  #定义外网视图

 77         match-clients { internet;};

 78         allow-recursion { none; };    #不可做递归请求

 79

 80 zone "czcedu.com." IN {

 81         type master;

 82         file "czcedu.com.internet";  #定义外网解析库文件

 83         allow-update { none; };

 84 };

 85 };

3、 创建两个解析库文件

技术分享图片

技术分享图片

4、 从不同客户端发出的DNS查询请求返回不同的IP

技术分享图片

技术分享图片

       好了,到此为止我们DNS服务器的应用就告一段落了,如有错误敬请指正。

技术分享图片


以上是关于Traefk配置https域名详解的主要内容,如果未能解决你的问题,请参考以下文章

使用eclipse上Tomcat插件配置域名端口号启动时间详解

Nginx 配置 HTTPS(多域名)

Linux命令详解-DNS服务器的配置和管理

nginx配置多域名(二级域名)

在阿里云域名https配置(nginx为例)

?DNS子域授权view配置详解