0
点赞
收藏
分享

微信扫一扫

k8s重点知识Ingress技法精讲


理论

k8s重点知识Ingress技法精讲_运维

Ingress 解决什么问题

  1. 动态配置服务

如果按照传统方式, 当新增加一个服务时, 我们可能需要在流量入口加一个反向代理指向我们新的k8s服务. 而如果用了Ingress, 只需要配置好这个服务, 当服务启动时, 会自动注册到Ingress的中, 不需要额外的操作。

  1. 减少暴露不必要端口

配置过k8s的都清楚, 第一步是要关闭防火墙的, 主要原因是k8s的很多服务会以NodePort方式映射出去, 这样就相当于给宿主机打了很多孔, 既不安全也不优雅. 而Ingress可以避免这个问题, 除了Ingress自身服务可能需要映射出去, 其他服务都不要用NodePort方式
  
Ingress 工作原理

  1. ingress controller通过和kubernetes api交互,动态的去感知集群中ingress规则变化,
  2. 然后读取它,按照自定义的规则,规则就是写明了哪个域名对应哪个service,生成一段nginx配置
  3. 再写到nginx-ingress-control的pod里,这个Ingress controller的pod里运行着一个Nginx服务,控制器会把生成的nginx配置写入/etc/nginx.conf文件中
  4. 然后reload一下使配置生效。以此达到域名分配置和动态更新的问题。

Ingress网站:
​​​ https://github.com/kubernetes/ingress-nginx​​

https://kubernetes.github.io/ingress-nginx/

示例

提示:使用vim创建yaml并运行,否则,复制可能导致格式错误。

1、 创建2个Deployment
第一个: nginx镜像,replicas:3

vim deploy1.yaml

kind: Deployment
apiVersion: apps/v1
metadata:
name: deploy1
spec:
selector:
matchLabels:
app: nginx
replicas: 3
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent

第二个: httpd镜像,replicas:4
vim deploy2.yaml

kind: Deployment
apiVersion: apps/v1
metadata:
name: deploy2
spec:
selector:
matchLabels:
app: httpd
replicas: 4
template:
metadata:
labels:
app: httpd
spec:
containers:
- name: httpd
image: httpd
imagePullPolicy: IfNotPresent

2、 创建2个SVC资源,
第一个和第一个Deploy绑定

vim svc1.yaml

kind: Service
apiVersion: v1
metadata:
name: svc1
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80

第二个和第二个Deploy绑定

vim svc2.yaml

kind: Service
apiVersion: v1
metadata:
name: svc2
spec:
selector:
app: httpd
ports:
- protocol: TCP
port: 80
targetPort: 80

查看验证:

k8s重点知识Ingress技法精讲_运维_02


初步验证:集群内以IP访问

k8s重点知识Ingress技法精讲_vim_03


报错:请求超时

解决:查看容器,运行状态是running,在节点本地访问,成功!证明防火墙,阻止了访问,关闭防火墙、selinux

3、 部署Ingress
注意:这里使用的镜像,是国外的镜像,需要提前下载获得;将镜像导入节点服务器

1)终端下载:wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.35.0/deploy/static/provider/baremetal/deploy.yaml

修改配置:

vim deploy.yaml

k8s重点知识Ingress技法精讲_运维_04


验证:ingress,会自动创建名称空间,运行于某个节点

k8s重点知识Ingress技法精讲_运维_05


k8s重点知识Ingress技法精讲_nginx_06


2)创建yaml将Deployment资源对象关联

Ingress-controller的Deployment资源对象关联在一起了,也就是说,访问mandatora-svc就能否访问Ingress-controller的Depoyment资源的Pod的了。

vim mandatory-svc.yaml

apiVersion: v1
kind: Service
metadata:
name: ingress-nginx
namespace: ingress-nginx
spec:
type: NodePort
ports:
- name: http
port: 80
targetPort: 80
- name: https
port: 443
targetPort: 443
selector:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx

3)创建对应的Ingress规则

搭建http代理

vim ingress.yaml

kind: Ingress
apiVersion: extensions/v1beta1
metadata:
name: bdqn-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: ingress.bdqn.com
http:
paths:
- path: /nginx
backend:
serviceName: svc1
servicePort: 80
- path: /httpd
backend:
serviceName: svc2
servicePort: 80

查看对应规则的详细信息:

k8s重点知识Ingress技法精讲_容器_07

4、 验证:使用http协议访问域名成功

以Windows系统修改host文件为例:

https的:

172.16.0.170 ingress5.bdqn.com

172.16.0.170 ingress5.bdqn.com

k8s重点知识Ingress技法精讲_运维_08


k8s重点知识Ingress技法精讲_运维_09


搭建https代理

1、创建证书
mkdir /root/yaml/ingress/https -p

openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj “/CN=nginxsvc/O=nginxsvc”

k8s重点知识Ingress技法精讲_nginx_10


2、创建secret资源,将证书保存到k8s集群中

kubectl create secret tls tls-secret --key=tls.key --cert tls.crt

创建新的Deploy5.yaml

kind: Deployment
apiVersion: apps/v1
metadata:
name: deploy5
spec:
selector:
matchLabels:
app: nginx5
replicas: 2
template:
metadata:
labels:
app: nginx5
spec:
containers:
- name: nginx5
image: nginx
imagePullPolicy: IfNotPresent
---
kind: Service
apiVersion: v1
metadata:
name: svc-5
spec:
selector:
app: nginx5
ports:
- protocol: TCP
port: 80
targetPort: 80

3、创建对应Ingress规则。

vim ingress2.yaml

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: https
spec:
tls:
- hosts:
- ingress5.bdqn.com
secretName: tls-secret
rules:
- host: ingress5.bdqn.com
http:
paths:
- path: /
backend:
serviceName: svc-5
servicePort: 80

4、验证:域名访问测试https

k8s重点知识Ingress技法精讲_vim_11


举报

相关推荐

0 条评论