0
点赞
收藏
分享

微信扫一扫

k8s 练习 - ingress

小猪肥 2023-03-17 阅读 117

一、ingress-nginx

官方文档:​​https://kubernetes.github.io/ingress-nginx/deploy/​​

1.1 部署

使用官方提供的 manifest 模板(版本 1.6.4)修改:

  1. 强制 http 跳转到 https

# 在模板的这个 configmap 中的 data 下增加“force-ssl-redirect: "true"”
# 还有很多参数可以在官方文档查看
---
apiVersion: v1
data:
allow-snippet-annotations: "true"
force-ssl-redirect: "true"
kind: ConfigMap
metadata:
labels:
app.kubernetes.io/component: controller
app.kubernetes.io/instance: ingress-nginx
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
app.kubernetes.io/version: 1.6.4
name: ingress-nginx-controller
namespace: ingress-nginx
---

  1. 设置全局默认 TLS 证书

# 在 Deployment 中的启动参数(spec.template.spec.containers.args)
# 增加 “--default-ssl-certificate=ingress-nginx/default-tls”
# ingress-nginx 是命名空间,default-tls 是 secret
# 这里是因为我们有泛域名证书,设置一个全局默认证书后,下面的二级域名就不用每个都创建一个 secret
...
spec:
containers:
- args:
- /nginx-ingress-controller
- --publish-service=$(POD_NAMESPACE)/ingress-nginx-controller
- --election-id=ingress-nginx-leader
- --controller-class=k8s.io/ingress-nginx
- --ingress-class=nginx
- --configmap=$(POD_NAMESPACE)/ingress-nginx-controller
- --validating-webhook=:8443
- --validating-webhook-certificate=/usr/local/certificates/cert
- --validating-webhook-key=/usr/local/certificates/key
- --default-ssl-certificate=ingress-nginx/default-tls
...

服务启动后还需要创建证书:

# 部署
kubectl apply -f deploy.yaml

# 创建默认证书
kubectl create secret tls default-tls \
--key xxx.key --cert xxx.crt -n ingress-nginx

1.2 测试模板

# 访问 http://xx.xx.net 时,会直接跳转到 https,同时由于这里没有配置 TLS 证书,会使用配置的默认证书。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nginx-ingress
spec:
ingressClassName: nginx
rules:
- host: xx.xx.net
http:
paths:
- pathType: Prefix
path: /
backend:
service:
name: nginx
port:
number: 80

# 不使用默认证书,需要创建对应的 secret,还要在 ingress.spec 中配置 tls。
# 其中 tls 中的 hosts 的取值需要与 rules 字段中的 host 完全匹配。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: tls-example-ingress
spec:
tls:
- hosts:
- https-example.foo.com
secretName: testsecret-tls
rules:
- host: https-example.foo.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: service1
port:
number: 80

举报

相关推荐

0 条评论