kubernetes基础知识之ingress安装

内容分享2天前发布
4 0 0

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会话卸载层的模式。

kubernetes基础知识之ingress安装

央视新址

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

© 版权声明

相关文章

暂无评论

none
暂无评论...