系列博文
- 在Linux上使用Kubeadm工具部署Kubernetes
- 带你玩转Docker
- Kubernetes集群之搭建ETCD集群
- Kubernetes集群之Dashboard
- Kubernetes集群之Monitoring
- Kubernetes集群之Logging
- Kubernetes集群之Ingress
- Kubernetes集群之Redis Sentinel集群
- Kubernetes集群之Kafka和ZooKeeper
下载yaml文件
读者想要对应的yaml文件,可到这里进行下载。
部署默认后端
kubectl create -f default-backend.yaml
部署 Ingress Controller
修改yaml文件中,添加hostNetwork: true
,使其监听宿主机 80 端口:
spec:
template:
metadata:
labels:
name: nginx-ingress-lb
spec:
terminationGracePeriodSeconds: 60
hostNetwork: true
kubectl create -f nginx-ingress-daemonset.yaml
部署 Ingress
kubectl create -f dashboard-ingress.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: kubernetes-dashboard-ingress
namespace: kube-system
spec:
rules:
- host: dashboard.chenjian.com
http:
paths:
- path: /
backend:
serviceName: kubernetes-dashboard
servicePort: 80
- host: kibana.chenjian.com
http:
paths:
- path: /
backend:
serviceName: kibana-logging
servicePort: 5601
修改hosts文件
添加集群中的某个node或master的IP到hosts文件中,例如Linux系统:
echo "10.0.0.171 dashboard.chenjian.com" >> /etc/hosts
Ingress部署TLS(HTTPS)
创建证书
# 生成CA自签证书文件夹
mkdir cert && cd cert
# 生成CA自签证书的密钥
openssl genrsa -out ca-key.pem 2048
# 生成CA自签证书
openssl req -x509 -new -nodes -key ca-key.pem -days 10000 -out ca.pem -subj "/CN=kube-ca"
# 配置openssl部署
cp /etc/pki/tls/openssl.cnf .
vim openssl.cnf
# 修改如下
[ req ]
req_extensions = v3_req # 这行默认注释关着的 把注释删掉
# 下面配置是新增的
[ v3_req ]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = dashboard.chenjian.me
DNS.2 = kibana.chenjian.me
# 生成证书密钥
openssl genrsa -out ingress-key.pem 2048
# 生成证书的申请表
openssl req -new -key ingress-key.pem -out ingress.csr -subj "/CN=kube-ingress" -config openssl.cnf
# 生成证书 有效期为365天
openssl x509 -req -in ingress.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out ingress.pem -days 365 -extensions v3_req -extfile openssl.cnf
创建secret
ingress-secret.yaml文件格式如下:
apiVersion: v1
data:
tls.crt: ##内容为ingress.pem里的内容##
tls.key: ##内容为ingress-key.pem里的内容##
kind: Secret
metadata:
name: ingress-secret
namespace: kube-system
type: Opaque
create完成:
kubectl create -f ingress-secret.yaml
或者直接用文件:
kubectl create secret tls ingress-secret --key cert/ingress-key.pem --cert cert/ingress.pem --namespace kube-system
部署Ingress
kubectl create -f dashboard-ingress-tls.yaml
修改hosts文件
添加集群中的某个node或master的IP到hosts文件中,例如Linux系统:
echo "10.0.0.171 dashboard.chenjian.com" >> /etc/hosts
访问地址dashboard.chenjian.com
部署TLS后的80端口会自动重定向到443(HTTPS端口)
开始出现“Your connnection is not private”
在chrome浏览器中,HTTPS/SSL中添加ca.pem文件,并给予全部权限。
再次打开,没有https提示(钥匙上带叉的logo),但是URL栏中出现“Not Secure”这样的红色字样。
解决这个问题,需要重服务商买权威的CA证书。
本作品由陈健采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。