Ingress
service nodeport的问题:
端口有限,默认30000-32767 只有2768个。(可以自己改,但最大也就65535)
不安全,直接访问主机端口
负载均衡能力有限,4层复杂均衡。只能进行最基本的策略。
整体架构图

ingress方案:
- service不再使用nodeport,全内网部署
- 在部分机器上部署ingress-nginx。这个nginx是k8s管理的。所以可以路由到所有服务。
- ingress-nginx被ingress-controller管理,通过编写ingress-rule进行配置变更
- ingress-nginx相互之间数据同步
- 外网负载均衡将流量打给ingress-nginx
安装
Installation Guide - NGINX Ingress Controller (kubernetes.github.io)
注意提前拉取镜像
可以使用demonset,使每台机器部署一个
可以给node打标签,设置哪些机器部署ingress
Ingress rule
1 | apiVersion: networking.k8s.io/v1 |
nginx的全局配置
通过配置config-map
1 | kubectl edit cm ingress-nginx-controller -n ingress-nginx |
所有配置项参考 https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/configmap/
nginx开启功能
metadata里通过Annotations开启功能
路径重写
1 |
|
会话保持
基于cookie粘连
Sticky Sessions - NGINX Ingress Controller (kubernetes.github.io)
annotations
nginx.ingress.kubernetes.io/affinity
SSL
搞证书
自己玩:
1
2
3openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout ${KEY_FILE:tls.key}
-out ${CERT_FILE:tls.cert} -subj
"/CN=${HOST:xxx.com}/O=${HOST:xxx.com}"买个域名,申请个免费证书DV
这种下载的证书可能是pem文件,直接改成crt就行
配置secret
1
kubectl create secret tls xxx-tls --key tls.key --cert tls.cert
在ingress中使用
1
2
3
4
5
6spec:
tls:
- hosts:
- itdachang.com
secretName: itdachang-tls
金丝雀
Annotations - NGINX Ingress Controller (kubernetes.github.io)