深刻玩转K8S之如何访问业务应用(Traefik-ingress配置https篇)

上篇咱们简单介绍了下traefik以及如何http访问, 可是在实际生产环境中不单单只是http的转发访问,还有https的转发访问,web

 

前面一篇:traefik基础部署记录,介绍了最简单的http访问traefik,访问过程参考见下:后端

client --- (via http) ---> traefik ---- (via http) ---->  servicesapi

如今要实践的是更安全也更复杂的https访问traefik,有两种访问过程,参考见下:安全

后端service是普通http的
即client与traefik间采用https加密通讯,但traefik与svc间则是明文的http通讯
bash

client --- (via https) ---> traefik ---- (via http) ---->  servicesapp

后端service是https的
即client与traefik间采用https加密通讯,但traefik与svc也是采用https通讯
ide

client --- (via https) ---> traefik ---- (via https) ---->  services测试

 

下面咱们来看看如何实现(伪)https,也就是上面说的第二种访问流程。ui

 

首先建立证书,想开启https,证书是少不了的。能够本身手动建一个证书,或者利用已经有的证书。这里我本身建立了一个ssl证书,具体建立流程可参考网上。加密

[root@k8smaster ~]# cd /opt/k8s/ssl
[root@k8smaster ssl]# ls
ssl.crt  ssl.csr  ssl.key


上面这个/opt/k8s/ssl目录是我建立的,路径能够随便只要和config文件里面的路径一致就行下面会说到。下面开始配置证书


[root@k8smaster ssl]# kubectl create secret generic traefik-cert --from-file=ssl.crt --from-file=ssl.key -n kube-system
secret "traefik-cert" created


建立一个configmap,保存traefix的配置。这里的traefix中配置了把全部http请求所有rewrite为https的规则,并配置相应的证书位置,同时我这里也建立了一个目录/opt/k8s/conf/。


[root@k8smaster conf]# cat traefik.toml 
defaultEntryPoints = ["http","https"]
[entryPoints]
  [entryPoints.http]
  address = ":80"
    [entryPoints.http.redirect]
    entryPoint = "https"
  [entryPoints.https]
  address = ":443"
    [entryPoints.https.tls]
      [[entryPoints.https.tls.certificates]]
      certFile = "/opt/k8s/ssl/ssl.crt"
      keyFile = "/opt/k8s/ssl/ssl.key"
 
[root@k8smaster config]# kubectl create configmap traefik-conf --from-file=traefik.toml -n kube-system
configmap "traefik-conf" created


因为以前配置的是http如今要换成https因此须要更新下Traefik,这里主要是更新下关联建立的secret和configMap,并挂载相对应的主机目录。

 

安全起见操做以前先备份下(职场好习惯)


[root@k8smaster k8s]# cp traefik-deployment.yaml traefik-deployment.yaml.bk
[root@k8smaster k8s]# cat traefik-deployment.yaml 
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: traefik-ingress-controller
  namespace: kube-system
---
kind: DaemonSet
apiVersion: extensions/v1beta1
metadata:
  name: traefik-ingress-controller
  namespace: kube-system
  labels:
    k8s-app: traefik-ingress-lb
spec:
  selector:
    matchLabels:
      k8s-app: traefik-ingress-lb
  template:
    metadata:
      labels:
        k8s-app: traefik-ingress-lb
        name: traefik-ingress-lb
    spec:
      serviceAccountName: traefik-ingress-controller
      terminationGracePeriodSeconds: 60
      hostNetwork: true
      volumes:
      - name: ssl
        secret:
          secretName: traefik-cert
      - name: config
        configMap:
          name: traefik-conf
      containers:
      - image: traefik
        name: traefik-ingress-lb
        volumeMounts:
        - mountPath: "/opt/k8s/ssl/"
          name: "ssl"
        - mountPath: "/opt/k8s/conf/"
          name: "config"
        ports:
        - name: http
          containerPort: 80
        - name: https
          containerPort: 443
        - name: admin
          containerPort: 8080
        args:
        - --configFile=/opt/k8s/conf/traefik.toml
        - --api
        - --kubernetes
        - --logLevel=INFO
---
kind: Service
apiVersion: v1
metadata:
  name: traefik-ingress-service
  namespace: kube-system
spec:
  selector:
    k8s-app: traefik-ingress-lb
  ports:
    - protocol: TCP
      port: 80
      name: web
    - protocol: TCP
      port: 443
      name: https
    - protocol: TCP
      port: 8080
      name: admin
  type: NodePort
[root@k8smaster k8s]# 
[root@k8smaster k8s]# kubectl apply -f traefik-deployment.yaml
serviceaccount "traefik-ingress-controller" created
daemonset.extensions "traefik-ingress-controller" created
service "traefik-ingress-service" created


主要变化呢是更新了几个方面:

kind: DaemonSet    官方默认是使用Deployment

hostNetwork: true   开启Node Port端口转发

volumeMounts:     新增volumes挂载点

ports:             新增https443

args:              新增configfile

以及Service层的443 ports


最后咱们来测试下是否成功,这里咱们能够登录traefik-ui界面,能够看到本来http的访问,traefik会直接给咱们重定向至https。

博客01.png

关于第三种https转发https实现方式这里就再也不赘述了后续若是有须要能够在探讨,若是须要的话能够看下am的博客也就是本文参考的资料,写的很详细。

 

本文博客参考资料:

https://blog.51cto.com/goome/2153703

相关文章
相关标签/搜索