kubernetes(K8S)创建自签TLS证书

TLS证书用于进行通信使用,组件需要证书关系如下:

组件需要使用的证书
etcdca.pem server.pem server-key.pem
flannelca.pem server.pem server-key.pem
kube-apiserverca.pem server.pem server-key.pem
kubeletca.pem ca-key.pem
kube-proxyca.pem kube-proxy.pem kube-proxy-key.pem
kubectlca.pem admin.pem admin-key.pem

安装证书生成证书工具cfssl

均在master节点执行。

# wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64
# wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64
# wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64
# chmod +x cfssl*
# cp cfssl-certinfo_linux-amd64 /usr/local/bin/cfssl-certinfo
# cp cfssljson_linux-amd64 /usr/local/bin/cfssljson
# cp cfssl_linux-amd64 /usr/local/bin/cfssl

创建生成证书脚本

# more cert.sh 
#生成ca-config.json证书
cat > ca-config.json <<EOF
{
  "signing": {
    "default": {
      "expiry": "87600h"
    },
    "profiles": {
      "kubernetes": {
         "expiry": "87600h",
         "usages": [
            "signing",
            "key encipherment",
            "server auth",
            "client auth"
        ]
      }
    }
  }
}
EOF

#生成ca-csr.json文件
cat > ca-csr.json <<EOF
{
    "CN": "kubernetes",
    "key": {
        "algo": "rsa",
        "size": 2048
    },
    "names": [
        {
            "C": "CN",
            "L": "Beijing",
            "ST": "Beijing",
            "O": "k8s",
            "OU": "System"
        }
    ]
}
EOF

#生成ca-key.pem ca.pem
cfssl gencert -initca ca-csr.json | cfssljson -bare ca -

#-----------------------

#生成server-csr.json文件
cat > server-csr.json <<EOF
{
    "CN": "kubernetes",
    "hosts": [
      "127.0.0.1",
      "172.17.0.218",
      "172.17.0.219",
      "172.17.0.219",
      "kubernetes",
      "kubernetes.default",
      "kubernetes.default.svc",
      "kubernetes.default.svc.cluster",
      "kubernetes.default.svc.cluster.local"
    ],
    "key": {
        "algo": "rsa",
        "size": 2048
    },
    "names": [
        {
            "C": "CN",
            "L": "BeiJing",
            "ST": "BeiJing",
            "O": "k8s",
            "OU": "System"
        }
    ]
}
EOF

#生成server.pem,server-key.pem
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes server-csr.json | cfssljson -bare server

#-----------------------

#生成admin-csr.json文件
cat > admin-csr.json <<EOF
{
  "CN": "admin",
  "hosts": [],
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "L": "BeiJing",
      "ST": "BeiJing",
      "O": "system:masters",
      "OU": "System"
    }
  ]
}
EOF

#最后生成admin证书---admin-key.pem ,admin.pem
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes admin-csr.json | cfssljson -bare admin

#-----------------------

#生成代理
cat > kube-proxy-csr.json <<EOF
{
  "CN": "system:kube-proxy",
  "hosts": [],
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "L": "BeiJing",
      "ST": "BeiJing",
      "O": "k8s",
      "OU": "System"
    }
  ]
}
EOF

#生成代理证书kube-proxy-key.pem , kube-proxy.pem
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes kube-proxy-csr.json | cfssljson -bare kube-proxy
# sh cert.sh
//查看生成的证书
# ls | grep pem
admin-key.pem
admin.pem
ca-key.pem
ca.pem
kube-proxy-key.pem
kube-proxy.pem
server-key.pem
server.pem

至此,kubernetes(K8S)创建自签TLS证书完成。

转载请添加出处:https://www.cnblogs.com/aresxin

转载于:https://www.cnblogs.com/aresxin/p/K8S-TLS.html

### 如何在 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 方式连接.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值