赞
踩
kubectl apply -f https://github.com/kubernetes/dashboard/blob/v2.6.1/aio/deploy/alternative.yaml
# 创建目录 cd /data/k8s-data mkdir certs # 一、成为证书颁发机构 # # 生成 CA 私钥 openssl genrsa -out arnoCA.key 4096 # # 或者 生成 需要密码的 私钥 # openssl genrsa -des3 -out arnoCA.key 4096 # # 生成 CA 公钥/根 证书 # C = Country Name (2 letter code) # ST = State or Province Name (full name) # L = Locality Name (eg, city) # O = Organization Name (eg, company) # OU = Organizational Unit Name (eg, section) # CN = Common Name (e.g. server FQDN or YOUR name) # emailAddress = Email Address # -days 7300 为 20 年 openssl req -x509 -new -nodes -key arnoCA.key -sha256 -days 7300 -out arnoCA.pem -subj "/C=CN/ST=Guang Dong/L=Shen Zhen/O=ArnoJin/OU=IT Department/CN=Arno Jin Root CA/emailAddress=arno@arnojin.com" ls -lah # 此时生成了2个文件 arnoCA.key arnoCA.pem # 其中 arnoCA.pem 用于在 Chrome 或者 Windows, Linux 中导入 # 二、创建 使用 CA 公钥/根 证书 签名的 域名 证书 NAME=k8s.arno # 生成 用于 域名的 私钥 openssl genrsa -out ${NAME}.key 4096 # 生成 用于 域名的 证书,注意这里 CN 必须设置为对应的域名 openssl req -new -key ${NAME}.key -out ${NAME}.csr -subj "/C=CN/ST=Guang Dong/L=Shen Zhen/O=ArnoJin/OU=IT Department/CN=${NAME}/emailAddress=arno@arnojin.com" # 创建 证书签名 扩展配置文件(必须做以下设置,否则 Chrome 还是会不认) tee $NAME.ext <<-'EOF' subjectKeyIdentifier=hash authorityKeyIdentifier=keyid,issuer basicConstraints=CA:FALSE keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment subjectAltName = @alt_names [alt_names] DNS.1 = k8s.arno EOF # 使用 CA 公钥/根 证书 为 域名 证书签名(可选) openssl x509 -req -in $NAME.csr -CA arnoCA.pem -CAkey arnoCA.key -CAcreateserial -out $NAME.crt -days 7300 -sha256 -extfile $NAME.ext # 验证 域名 证书 对域名的有效性 openssl verify -CAfile arnoCA.pem -verify_hostname ${NAME} ${NAME}.crt # 此时生成了 k8s.arno.crt k8s.arno.key k8s.arno.ext k8s.arno.crs # 其中 k8s.arno.crt k8s.arno.key 这2个文件用于 Nginx # 将 arnoCA.pem 通过 Chrome 的 chrome://settings/security 管理证书 -> 受信任的根证书颁发机构 -> 导入 # # 涉及的 openssl 配置文件路径 /etc/ssl/openssl.cnf # # 将 arnoCA.pem 根证书添加到 ubuntu 的信任列表 # sudo cp arnoCA.pem /usr/local/share/ca-certificates/arnoCA.crt # sudo update-ca-certificates
kubectl -n kubernetes-dashboard create secret tls kubernetes-dashboard-certs-k8s-arno --cert=$NAME.crt --key=$NAME.key
# kubectl apply -f kubernetes-dashboard-ingress.yaml kind: Ingress apiVersion: networking.k8s.io/v1 metadata: namespace: kubernetes-dashboard name: kubernetes-dashboard annotations: kubernetes.io/ingress.class: "nginx" nginx.ingress.kubernetes.io/enable-access-log: "true" nginx.ingress.kubernetes.io/configuration-snippet: | access_log /var/log/nginx/dashboard-access.log upstreaminfo if=$loggable; error_log /var/log/nginx/dashboard-error.log; spec: tls: - hosts: - "k8s.arno" secretName: kubernetes-dashboard-certs-k8s-arno rules: - host: "k8s.arno" http: paths: - pathType: Prefix path: / backend: service: name: kubernetes-dashboard port: number: 80
# 创建 ingress
kubectl apply -f kubernetes-dashboard-ingress.yaml
# 通过 https 访问 Kubernetes Dashboard
curl -L https://k8s.arno
# 如果 证书没有安装到系统,则可以使用如下参数规避 SSL 安全警告
# curl -L -k --tlsv1 https://k8s.arno
# curl -L -k -v https://k8s.arno
# kubectl apply -f account.yaml kind: ServiceAccount apiVersion: v1 metadata: name: admin-user namespace: kubernetes-dashboard --- kind: ClusterRoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: admin-user roleRef: kind: ClusterRole apiGroup: rbac.authorization.k8s.io name: cluster-admin subjects: - kind: ServiceAccount name: admin-user namespace: kubernetes-dashboard
# 使用 Token 登录
kubectl apply -f account.yaml
kubectl -n kubernetes-dashboard create token admin-user
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。