跳转至

Ingress 配置 SSL证书


2020-06-10 by dongnan

开始之前

在《通过 Ingress 访问K8S内部的应用》这篇文章中,SSL终止K8s集群外部的负载均衡器, 如果使用的是裸金属方式部署的K8s集群没有外部负载均衡可用的。

需要K8s集群的Ingress控制器自行完成SSL终止工作,接下来介绍如何为Ingress(控制器)配置SSL证书。

环境

测试的k8s集群由一个Master管理节点、两个Worker计算节点组成,详细请参考这里

操作步骤

Secret

首先将SSL证书转换为secret对象,secret对象既可以Yaml文件创建,也可以使用命令行方式创建。

本次使用的SSL证书,是由GeoTrust签发的证书,下载时选择Nginx服务器类型,将会得到两个文件:

  • demo.pem ,证书文件。
  • demo.key,证书私钥文件。

从证书文件创建 secret 对象:

kubectl create secret tls demo-ssl-2020 --key demo.key --cert demo.pem

参数说明:

  • tls 表示secret的类型为TLS,这与之前的docker-registry有些不同
  • demo-ssl-2020secret对象的名称。
  • --key 证书私钥文件。
  • --cert 证书文件。

验证

查看创建的 secret 对象:

kubectl describe secrets demo-ssl-2020
Name:         demo-ssl-2020
Namespace:    default
Labels:       <none>
Annotations:  <none>

Type:  kubernetes.io/tls

Data
====
tls.crt:  4029 bytes
tls.key:  1679 bytes

Ingress

接下来准备 Ingress 对象部分。

Yaml 文档

Yaml 文件如下:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: demo-sfsp
  annotations:
    nginx.ingress.kubernetes.io/affinity: "cookie"
    nginx.ingress.kubernetes.io/session-cookie-name: "demo"
    nginx.ingress.kubernetes.io/session-cookie-expires: "172800"
    nginx.ingress.kubernetes.io/session-cookie-max-age: "172800"
    nginx.ingress.kubernetes.io/proxy-send-timeout: "600"
    nginx.ingress.kubernetes.io/proxy-read-timeout: "600"
    nginx.ingress.kubernetes.io/proxy-connect-timeout: "300"
    nginx.ingress.kubernetes.io/session-cookie-path: "/"
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
spec:
  tls:
  - hosts:
    - sfsp.xyc.com
    secretName: demo-ssl-2020   # 这里

  rules:
  - host: sfsp.xyc.com
    http:
      paths:
      - path: /
        backend:
          serviceName: sfsp-web-svc
          servicePort: 80

注意:

  • 配置项secretName的值是之前创建的secret对象。
  • nginx.ingress.kubernetes.io/ssl-redirect: "true" 表示HTTP强制跳转HTTPS

创建 Ingress

创建 Ingress 对象:

kubectl apply -f demo-ssl-ingress.yaml

验证

在集群外部成功访问项目系统:

url -IL https://sfsp.xyc.com
HTTP/2 200 
date: Wed, 10 June 2020 03:17:22 GMT
content-type: text/html; charset=UTF-8
vary: Accept-Encoding
set-cookie: demo=1640747843.821.8271.782330; Expires=Tus, 30-June-20 03:17:22 GMT; Max-Age=172800; Path=/; Secure; HttpOnly

参考

回到页面顶部