标签:temp 前言 mit port 设置 文件创建 name node 直接
kubernetes
自带的service
概念只有四层代理,即表现形式为IP:Port
.
如果需要实现七层代理,即绑定到域名的话,则需要另一个了,即ingress api
v1.11
推出了ingress api
接口,既而达到七层代理的效果ingress
来说,必须要绑定一个域名Ingress可以理解为Service的Service。它由两部分组成
ingress-nginx
是最常用的ingress-controller
会动态地按照策略生成配置文件(如:nginx.conf
)ingress的部署,需要考虑两个方面:
ingress-controller
是作为pod
来运行的,那么以什么方式部署比较好?ingress
解决了把如何请求路由到集群内部,那它自己怎么暴露给外部比较好?下面列举一些目前常见的部署和暴露方式,具体使用哪种方式还是得根据实际需求来考虑决定。
如果要把ingress部署在公有云,那可以选择这种方式。用Deployment部署ingress-controller,创建一个type为LoadBalancer的service关联这组pod。大部分公有云,都会为LoadBalancer的service自动创建一个负载均衡器,通常还绑定了公网地址。只要把域名解析指向该地址,就实现了集群服务的对外暴露。
需要额外购买公有云的服务!
同样用deployment模式部署ingress-controller,并创建对应的服务,但是type为NodePort。这样,ingress就会暴露在集群节点ip的特定端口上。由于nodeport暴露的端口是随机端口,一般会在前面再搭建一套负载均衡器来转发请求。该方式一般用于宿主机是相对固定的环境ip地址不变的场景。
缺点:
https://www.xx.com:30076
,其中30076
是kubectl get svc -n ingress-nginx
的svc暴露出来的nodeport
端口用DaemonSet
结合nodeselector
来部署ingress-controller
到特定的node
上,然后使用HostNetwork
直接把该pod与宿主机node的网络打通,直接使用宿主机的80/433
端口就能访问服务。这时,ingress-controller
所在的node机器就很类似传统架构的边缘节点,比如机房入口的nginx服务器
优点
缺点
ingress-controller pod
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/provider/baremetal/deploy.yaml
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
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: **************************
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
$ kubectl get svc -n ingress-nginx
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ingress-nginx-controller NodePort 10.104.80.142 <none> 80:30122/TCP,443:30577/TCP 21h
https://toc.codepie.fun:30577
kubernetes系列(十) - 通过Ingress实现七层代理
标签:temp 前言 mit port 设置 文件创建 name node 直接
原文地址:https://www.cnblogs.com/baoshu/p/13255909.html