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域名详解的主要内容,如果未能解决你的问题,请参考以下文章