本示介绍Ingress如何通过Secret配置TLS证书实现HTTPS访问。
操作步骤
步骤一 :部署服务
- 创建并拷贝以下内容到cafe-service.yaml文件中,并执行
kubectl apply -f cafe-service.yaml
命令,分别部署一个coffee服务和tea服务。apiVersion: apps/v1
kind: Deployment
metadata:
name: coffee
spec:
replicas: 2
selector:
matchLabels:
app: coffee
template:
metadata:
labels:
app: coffee
spec:
containers:
- name: coffee
image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginxdemos:latest
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: coffee-svc
spec:
ports:
- port: 80
targetPort: 80
protocol: TCP
selector:
app: coffee
clusterIP: None
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: tea
spec:
replicas: 1
selector:
matchLabels:
app: tea
template:
metadata:
labels:
app: tea
spec:
containers:
- name: tea
image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginxdemos:latest
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: tea-svc
labels:
spec:
ports:
- port: 80
targetPort: 80
protocol: TCP
selector:
app: tea
clusterIP: None
系统输出类似以下结果:
deployment "coffee" created
service "coffee-svc" created
deployment "tea" created
service "tea-svc" created
- 执行以下命令查看服务状态。
kubectl get svc,deploy
系统输出类似以下结果:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
svc/coffee-svc ClusterIP <none> <none> 80/TCP 1m
svc/tea-svc ClusterIP <none> <none> 80/TCP 1m
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
deploy/coffee 2 2 2 2 1m
deploy/tea 1 1 1 1 1m
步骤二:配置TLS证书
您需要配置TLS证书实现HTTPS访问。
- 执行以下命令,生成TLS证书。
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=bar.foo.com/O=bar.foo.com"
系统输出类似以下结果:
Generating a 2048 bit RSA private key
..........................+++
....................................................................+++
writing new private key to 'tls.key'
-----
- 执行以下命令根据生成的TLS证书文件创建集群的secret。
kubectl create secret tls cert-example --key tls.key --cert tls.crt
系统输出类似以下结果:
secret/cert-example created
- 执行以下命令,查看新建TLS证书配置。
kubectl get secret cert-example
系统输出类似以下结果:
NAME TYPE DATA AGE
cert-example kubernetes.io/tls 2 12s
重要
- Ingress Controller会自动依据第一个创建的Ingress的TLS证书来初始化SLB的HTTPS默认证书,您只能通过Ingress引用的secret修改证书配置,不可在SLB控制台自行修改。当前不支持配置多个证书,若您想要使用多个域名的多个证书您可以通过复用SLB的方式为每一个证书分别指定一个SLB实例。
- 您手动在SLB控制台上面做的任何修改都有可能导致Ingress服务异常,请不要在SLB控制台做修改。
步骤三:配置Ingress
- 创建并拷贝以下内容到cafe-ingress.yaml文件中,并执行
kubectl apply -f cafe-ingress.yaml
命令,通过Ingress配置coffee和tea服务对外暴露的域名和path路径。# cat cafe-ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: cafe-ingress
spec:
tls:
- hosts:
- foo.bar.com
secretName: cert-example
rules:
# 配置七层域名
- host: foo.bar.com
http:
paths:
# 配置Context Path
- path: /tea
backend:
service:
name: tea-svc
port:
number: 80
pathType: ImplementationSpecific
# 配置Context Path
- path: /coffee
backend:
service:
name: coffee-svc
port:
number: 80
pathType: ImplementationSpecific
系统输出类似以下结果:
ingress "cafe-ingress" created
- 执行以下命令获取SLB实例IP。
kubectl get ing
系统输出类似以下结果:
NAME HOSTS ADDRESS PORTS AGE
cafe-ingress foo.bar.com 139.168.XX.XX 80 1m
步骤四:访问服务
说明 目前需要您自行将域名解析到SLB实例IP上。
本例在域名中添加一条DNS域名解析规则,用于测试服务访问。建议您在工作环境中对域名进行备案。
139.168.XX.XX foo.bar.com
访问coffee服务。
访问tea服务。