[单master节点k8s部署]36.ingress 配置https(三)

目前我们的tomcat服务在浏览器上通过http来访问。为了提升安全性,我们将配置TLS secret 证书,从而可以进行https访问。

一对TLS密钥包括一个证书(trs.crt)和一个私钥,证书是公钥证书,用于加密数据并标识服务器,而服务器的私钥,用于解密通过公钥加密的数据,并用于签署服务器发送给客户端的数据。

当我想要配置我的ingress 资源从而支持https访问时,Ingress Controller 需要一个证书和私钥来处理 TLS 握手和加密通信。

创建TLS证书
复制代码
openssl genrsa -out tls.key 2048
openssl req -new -x509 -key tls.key -out tls.crt -subj 
 /C=CN/ST=Beijing/L=Beijing/O=DevOps/CN=tomcat.lucky.com

第一句话用于生成一个rsa格式的密钥,保存在tls.key文件中。

第二句话生成一个 自签名 X.509 证书 ,而不是生成一个证书签名请求(CSR)。X.509 是公钥证书的标准格式,广泛用于 SSL/TLS 协议中。使用 -x509 会直接生成证书,而不是请求证书颁发机构(CA)签署的证书。这个证书是配套tls.key的内容。将生成的自签名证书保存到 tls.crt 文件中。

-subj "/C=CN/ST=Beijing/L=Beijing/O=DevOps/CN=tomcat.lucky.com"用于指定密钥的主题,

  • C=CNC 表示 国家名称 (Country)。在这个例子中,CN 代表中国 (China)。
  • /ST=BeijingST 表示 省/州 (State or Province)。这里指定为 Beijing,表示北京市。
  • /L=BeijingL 表示 城市名称 (Locality)。这里同样为 Beijing
  • /O=DevOpsO 表示 组织名称 (Organization)。在这个例子中,DevOps 代表组织的名称。
  • /CN=tomcat.lucky.comCN 表示 通用名称 (Common Name)。这是最重要的字段,通常用于指定证书的域名。在这个例子中,tomcat.lucky.com 是证书所保护的域名
生成secret文件
复制代码
[root@master 35ingress]# kubectl create secret tls nginx-ingress-secret --cert=tls.crt --key=tls.key
secret/nginx-ingress-secret created
您在 /var/spool/mail/root 中有新邮件
[root@master 35ingress]# kubectl get secret
NAME                   TYPE                DATA   AGE
nginx-ingress-secret   kubernetes.io/tls   2      6s
[root@master 35ingress]# kubectl describe secret nginx-ingress-secret
Name:         nginx-ingress-secret
Namespace:    default
Labels:       <none>
Annotations:  <none>

Type:  kubernetes.io/tls

Data
====
tls.crt:  1245 bytes
tls.key:  1675 bytes
创建ingress

这个ingress是有tls的ingress,用来代替之前的ingress

复制代码
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-tomcat-tls
  namespace: default
  annotations:
    kubernetes.io/ingress.class: "nginx"
spec:
  tls:
  - hosts:
    - tomcat.lucky.com
    secretName: nginx-ingress-secret  # 指定使用的 TLS Secret
  rules:
  - host: tomcat.lucky.com
    http:
      paths:
      - pathType: Prefix
        path: /
        backend:
          service:
            name: tomcat  # 服务名称
            port:
              number: 8080  # 服务端口

[root@master 35ingress]# kubectl get ingress
NAME                 CLASS   HOSTS              ADDRESS           PORTS     AGE
ingress-myapp        nginx   tomcat.lucky.com                     80        11s
ingress-tomcat-tls   nginx   tomcat.lucky.com   192.168.244.129   80, 443   103s

可以看到有tls的ingress还开启了443服务。

在 Kubernetes 的 Ingress 资源中,当你配置了 TLS 时,Ingress 控制器会自动为你启用 443 端口以处理 HTTPS 请求。这是因为 TLS (Transport Layer Security) 是用于加密 HTTP 请求的协议,而 HTTPS(即 HTTP over TLS)默认使用 443 端口来传输加密的流量。

可以看到用https访问域名,页面如下:

相关推荐
极客先躯22 分钟前
高级java每日一道面试题-2026年02月08日-实战篇[Docker]-如何实现容器的快照和恢复?
java·运维·docker·容器·备份·持久化·恢复
AI服务老曹27 分钟前
打破品牌壁垒:基于 Docker 的国标 GB28181 与 RTSP 异构视频流统一接入平台架构设计(可源码交付)
运维·docker·容器
yyoc9741 分钟前
本地 Flink on K8s + Iceberg + MinIO 实时数仓平台 — AI部署指南与踩坑实录
大数据·ai·flink·kubernetes·iceberg
r-t-H41 分钟前
Docker进阶与容器编排实践-第二章
运维·docker·容器·dockerfile·docker compose·docker网络
张忠琳11 小时前
【containerd 2.1.8】(Part 1)containerd 2.1.8 超深度源码分析 — 总体架构与模块全景
云原生·kubernetes·containerd
正经教主14 小时前
【docker基础】第五课:Docker网络详解
运维·docker·容器
Waay16 小时前
K8s ETCD 详解|备份恢复+静态Pod原理+kubectl查询底层流程(面试必考)
面试·kubernetes·etcd
松岩16 小时前
dcgm-exporter部分指标
kubernetes
我是谁??18 小时前
ubuntu22.04 通过docker部署vLLM(Qwen3-0.6B)大模型+New API+OpenWebUI
docker·容器·vllm
Patrick_Wilson18 小时前
K8s 探针避坑:Next.js 不同部署模式下的健康检查实践
kubernetes·node.js·next.js