kubernetes系列(十) - 通过Ingress实现七层代理
2021-01-24 11:12
标签:temp 前言 mit port 设置 文件创建 name node 直接
如果需要实现七层代理,即绑定到域名的话,则需要另一个了,即 Ingress可以理解为Service的Service。它由两部分组成 https://github.com/kubernetes/ingress-nginx https://kubernetes.github.io/ingress-nginx ingress的部署,需要考虑两个方面: 下面列举一些目前常见的部署和暴露方式,具体使用哪种方式还是得根据实际需求来考虑决定。 如果要把ingress部署在公有云,那可以选择这种方式。用Deployment部署ingress-controller,创建一个type为LoadBalancer的service关联这组pod。大部分公有云,都会为LoadBalancer的service自动创建一个负载均衡器,通常还绑定了公网地址。只要把域名解析指向该地址,就实现了集群服务的对外暴露。 需要额外购买公有云的服务! 同样用deployment模式部署ingress-controller,并创建对应的服务,但是type为NodePort。这样,ingress就会暴露在集群节点ip的特定端口上。由于nodeport暴露的端口是随机端口,一般会在前面再搭建一套负载均衡器来转发请求。该方式一般用于宿主机是相对固定的环境ip地址不变的场景。 缺点: 用 优点 缺点 kubernetes系列(十) - 通过Ingress实现七层代理 标签:temp 前言 mit port 设置 文件创建 name node 直接 原文地址:https://www.cnblogs.com/baoshu/p/13255909.html
1. Ingress入门
1.1 Ingress简介
kubernetes
自带的service
概念只有四层代理,即表现形式为IP:Port
.ingress api
v1.11
推出了ingress api
接口,既而达到七层代理的效果ingress
来说,必须要绑定一个域名1.2 原理和组成部分
ingress-nginx
是最常用的
ingress-controller
会动态地按照策略生成配置文件(如:nginx.conf
)1.3 资料信息
2. Ingress部署的几种方式
2.1 前言
ingress-controller
是作为pod
来运行的,那么以什么方式部署比较好?ingress
解决了把如何请求路由到集群内部,那它自己怎么暴露给外部比较好?
2.1 Deployment+LoadBalancer模式的Service
2.2 Deployment+NodePort模式的Service
https://www.xx.com:30076
,其中30076
是kubectl get svc -n ingress-nginx
的svc暴露出来的nodeport
端口
2.3 DaemonSet+HostNetwork+nodeSelector
DaemonSet
结合nodeselector
来部署ingress-controller
到特定的node
上,然后使用HostNetwork
直接把该pod与宿主机node的网络打通,直接使用宿主机的80/433
端口就能访问服务。这时,ingress-controller
所在的node机器就很类似传统架构的边缘节点,比如机房入口的nginx服务器
ingress-controller pod
3. Deployment+NodePort模式
3.1. 官网下载yaml,安装ingress-nginx
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/provider/baremetal/deploy.yaml
3.2. 创建deployment和service
clusterip
apiVersion: apps/v1
kind: Deployment
metadata:
name: tocgenerator-deploy
namespace: default
labels:
app: tocgenerator-deploy
spec:
replicas: 2
revisionHistoryLimit: 2
selector:
matchLabels:
app: tocgenerator-server
template:
metadata:
labels:
app: tocgenerator-server
spec:
containers:
- name: tocgenerator
image: lzw5399/tocgenerator:latest
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: tocgenerator-svc
spec:
selector:
app: tocgenerator-server
ports:
- protocol: TCP
port: 80
targetPort: 80
3.3 创建https证书的secret
kubectl create secret tls mywebsite-secret --key tls.key --cert tls.crt
apiVersion: v1
kind: Secret
metadata:
name: mywebsite-secret
data:
tls.crt: **************************
tls.key: **************************
3.4. 创建ingress策略
ingress策略
必须和service同一个namespace!apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: tocgenerator-ingress
spec:
tls:
- hosts:
- toc.codepie.fun
secretName: toc-secret
rules:
- host: toc.codepie.fun
http:
paths:
- path: /
backend:
serviceName: tocgenerator-svc
servicePort: 80
3.5 查看ingress-controller的nodeport端口,并访问
$ kubectl get svc -n ingress-nginx
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ingress-nginx-controller NodePort 10.104.80.142
https://toc.codepie.fun:30577
下一篇:js-动态修改伪元素样式
文章标题:kubernetes系列(十) - 通过Ingress实现七层代理
文章链接:http://soscw.com/index.php/essay/46287.html