Contents
  1. 1. 证书
  2. 2. traefik配置
  3. 3. k8s ingress

ssl双向认证简单来说就是服务端需要认证客户端证书,客户端也需要认证服务端证书。通常应用于安全等级很高的内部系统,保证能访问系统的客户端都是授信任的。

证书

通常我们可以使用ca自签来颁发服务端和客户端证书,值得注意的是生成服务端签名申请(csr)中的Common Name值需要填写真实访问的域名,最后生成的p12证书需要导入到客户端浏览器

具体步骤可以参照下面的文章
openssl生成ca证书配置ssl双向认证
openssl签署自己的泛域名(通配符)证书

traefik配置

因为是双向认证,为了和普通的单向认证区分,我们新配一个entry point名为secure

optional = false 表示要验证客户端证书是否经过ca签名

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
defaultEntryPoints = ["http", "https"]
[entryPoints]
[entryPoints.http]
address = ":80"
[entryPoints.https]
address = ":443"
[entryPoints.secure]
address = ":8443"
[entryPoints.secure.tls]
[entryPoints.secure.tls.ClientCA]
files = ["/etc/traefikssl/clientca.crt"]
optional = false
[[entryPoints.secure.tls.certificates]]
certFile = "/etc/traefikssl/bxr.cn.crt"
keyFile = "/etc/traefikssl/bxr.cn.key"

k8s ingress

在ing中使用Annotations标记使用secure entry point

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
traefik.ingress.kubernetes.io/frontend-entry-points: secure
name: kubernetes-dashboard
namespace: kube-system
spec:
rules:
- host: k8s.bxr.cn
http:
paths:
- backend:
serviceName: kubernetes-dashboard
servicePort: 9090

访问 https://k8s.bxr.cn:8443 浏览器就会要求你提供证书(之前生成的p12证书),没有证书不能访问。

Contents
  1. 1. 证书
  2. 2. traefik配置
  3. 3. k8s ingress