k8s学习笔记——traefik tls设置

本文详细介绍了如何在k8s环境中使用traefik配置TLS,包括生成证书、设置ingress中的tls信息以及在helm项目中启用https服务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//生成证书密钥,参考使用openssl 生成免费证书 - 龙恩0707 - 博客园

openssl genrsa -out tls.key 2048  //生成客户端密钥

openssl req -new -key client.key -out tls.csr //生成请求文件
//这里需要填写一些信息,其他的都不重要,关键在
//Common Name (eg, fully qualified host name) []:这个项填写的域名地址可以是一级域名还可以是二级域名,但域名必须和要设置https服务的域名一致

openssl x509 -req -days 365 -in tls.csr -signkey tls.key -out tls.crt //签发ca验证

//将证书设置成secret k8s 中ingress可读取的资源形式
kubectl create secret generic client-cert \
        --from-file=tls.crt \
        --from-file=tls.key -n client-namespace

//在ingress中设置tls证书信息

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-tomcat
  namespace: default
spec:
  ingressClassName: "traefik"
  tls:
  - secretName: shell-com-cert
  rules:
  - host: tomcat.shell.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: tomcat
            port:
              name: http

//查看
//kubectl get ingress
NAME             CLASS     HOSTS                  ADDRESS   PORTS     AGE
ingress-nginx    traefik   nginx-test.shell.com             80        44h
ingress-tomcat   traefik   tomcat.shell.com                 80, 443   44h
//可以看到暴露的443端口,当然这里也可将https服务设置成别的端口




只要把helm项目里values.yaml文件中的 tls设置为true就可以正常开启https

websecure:
    port: 8443
    # hostPort: 8443
    expose: true
    exposedPort: 443
    # The port protocol (TCP/UDP)
    protocol: TCP
    # nodePort: 32443
    # Set TLS at the entrypoint
    # https://doc.traefik.io/traefik/routing/entrypoints/#tls
    tls:
      enabled: true
      # this is the name of a TLSOption definition
      options: ""
      certResolver: ""
      domains: []
      # - main: example.com
      #   sans:
      #     - foo.example.com
      #     - bar.example.com

### 如何在 Kubernetes 中为 Ingress 设置 TLS 证书和加密 为了确保通过 Ingress 访问应用程序的安全性,可以通过配置 Transport Layer Security (TLS) 来实现数据传输的加密。这通常涉及到创建自签名证书或获取由受信任的证书颁发机构(CA)签发的证书。 #### 创建 TLS 秘钥和证书文件 首先需要准备服务器私钥(`server-key.pem`) 和对应的公钥证书 (`server-cert.pem`). 这些文件可以在本地生成或者从 CA 获取. #### 将 TLS 文件转换成 Secret 对象 使用 `kubectl create secret` 命令来创建一个包含上述两个文件内容的秘密对象(secret),该命令会将指定路径下的 `.pem` 文件作为 base64 编码后的字符串存储到 K8S 集群中: ```bash $ kubectl create secret tls my-tls-secret \ --cert=path/to/tls.crt \ --key=path/to/tls.key ``` 此操作会在默认命名空间下创建名为 `my-tls-secret` 的秘密资源[^1]. #### 修改 Ingress 资源定义以支持 HTTPS 协议 编辑现有的 ingress.yaml 或者新建一个 YAML 文件,在其中添加如下字段: ```yaml apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: name: example-ingress spec: tls: - hosts: - "example.com" secretName: my-tls-secret # 使用之前创建的秘密名称 rules: - host: "example.com" http: paths: - path: / backend: serviceName: web-service servicePort: 80 ``` 这段代码指定了当访问带有特定域名(如 `"example.com"`)请求时应匹配哪个后端服务,并关联了前面提到过的 TLS 密钥/证书组合. 完成以上步骤之后就可以提交更新给 API Server 并等待控制器应用更改了。一旦成功部署并生效,则所有针对所配置域名为前缀 URL 的流量都将被强制重定向至 HTTPS 方式连接.
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值