kubernetes ingress部署nginx controller可以使用deploy.yaml文件部署,修改kind类型Deployment为DaemonSet。
kubectl create -f deploy.yaml
接着分成3步:
1.创建ingress-nginx的ingress规则。
2.创建nginx-service的服务。
3.创建nginx后端真实服务器Real Server的pod。
helm安装方式:
helm install ingress-nginx -n ingress-nginx . -f values.yaml
helm卸载chart包:
helm uninstall $release -n $namespace_name
其它yaml文件安装方式:
创建的过程如下:
1.创建ingress规则的步骤:
touch ingress-nginx.yaml
vim ingress-nginx.yaml:
apiVsersion: networking.k8s.io/v1
metadata:
name: ingress-nginx
namespace: ingress-nginx
annotations:
ingressclass.kubernetes.io/is-default-class: “true” #ingress控制器由标记的class作为默认class
spec:
ingressClassName: nginx
rules:
– host: www.87long.com #自定义的域名
http:
paths:
– pathType: Prefix
path: “/”
backend:
service:
name: nginx-service #对应创建的服务名称
port:
number: 80
kubectl create -f ingress-nginx.yaml
2.创建nginx-service服务:
touch nginx-service.yaml
vim nginx-service.yaml:
apiVersion: v1
kind: Service
metadata:
name: nginx-service
namespace: ingress-nginx
labels:
app: nginx
spec:
ports:
– port: 80
targetPort: 80
selector:
app: nginx
kubectl create -f nginx-service.yaml
3.创建后端真实服务器的pod:
touch nginx.yaml
vim nginx.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
namespace: ingress-nginx
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
– name: c1
image: nginx
imagePullPolicy: Always
ports:
– containerPort: 80
kubectl create -f nginx.yaml
~~~
查看安装完的nginx-controller的pod:
kubectl get pod -n ingress-nginx | grep nginx-controller
指定ingress controller,在ingress-nginx.yaml中指定。
spec期望下的ingressClassName: nginx指定是nginx controller,其它类型分别是:istio、apisix、traefik。
backend后端是服务,如果ingress直接对接pod的IP的话,一旦pod地址发生变化,需要重新修改配置文件,并且需要重新载入配置文件并且重启nginx进程的,这是一个有代价的过程。
但是把ingress的后端对接到service上,service会自动抓取后端pod的IP地址。这个过程就会变得相对稳定一些,也更好用一些。
ingress-nginx.yaml中定义的后端服务名,必须要与nginx-service.yaml中定义的服务名一致。
ingress修改域名,只需要把ingress-nginx.yaml中的host改成新域名,改完应用配置:
kubectl apply -f ingress-nginx.yaml
同时需要修改dns的解析记录。
~~~
七层负载均衡,请求要走域名。如果想要访问ingress的资源对象,需要新增域名解析记录。
在真正的生产环境中,最好在前面搭建一个负载均衡lvs,然后对当前的每一个ingress节点的80端口和443端口做负载均衡,也就是用户访问实则解析的是lvs集群的80端口或者lvs集群的443端口。
这样做的好处是:万一有一天这个节点挂了,还有一个节点可以提供对应的7层负载均衡服务。
添加域名解析的方式可以在DNS服务器的上做,也可以添加域名解析记录,还可以在本地服务器的hosts文件中添加。
windows系统添加的方式,以管理员方式打开命令行,输入notepad。然后打开C盘
-windows-system32-drivers-etc中的hosts文件,添加上一行:
IP地址 域名
列如:
192.168.61.156 www.87long.com
不同的域名可以指向不同的服务。
这就是基于ingress去做http协议代理的方法。
~~~
ingress-nginx本身可以是https会话卸载层,也就是先使用https协议访问ingress,接着在ingress和后端服务之间使用http协议通信。这时候ingress nginx可以成为https会话卸载层。
创建证书:
openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj=”/CN=nginxsvc/O=nginxsvc”
创建密钥:
kubectl create secret tls ingress-nginx-tls –key tls.key –cert tls.crt -n ingress-nginx
把证书封装成secret对象的secret密钥名字。
接着把ingress-nginx.yaml中添加上证书:
annotations:
nginx.ingress.kubernetes.io/ssl-redirect: “true”
最下面添加上证书名称:
tls:
– hosts:
– ssl.87long.com
secretName: ingress-nginx-tls
HTTPS的会话卸载层,就是前端访问https协议,ingress后端的真实服务器使用HTTP协议。
ingress-nginx和后端nginx真实服务器之间,是通过nginx-service相互关联的,使用的是HTTP协议。但是外部用户跟ingress之间,使用的是HTTPS协议。内部http协议相对于外部HTTPS协议来说,卸载了ssl的加密层,所以这种模式叫https会话卸载层。
kubectl create secret tls ingress-nginx-tls –key tls.key –cert tls.crt
把证书和私钥封装成secret对象。
如果是资源对象想用文件的话,可以把文件封装成存储类别的资源对象,再去调用。
同样,新建了证书访问的ingress规则之后,也需要在本地hosts文件中添加域名解析记录去测试。
浏览器输入域名访问的时候,会自动跳转到HTTPS的虚拟主机。
使用ingress可以把kubernetes集群内部的http服务,给它添加一个加密层,对外提供443的安全访问。
这就是https会话卸载层的模式。

央视新址
鼓励的话语:每一次挑战,都是铸就辉煌的锤炼。让我们勇往直前,让梦想翱翔于天际!
 
                
 
                 
                 
                





 
                