赞
踩
Ingress官网:https://kubernetes.github.io/ingress-nginx/
Ingress底层使用的是nginx,上一篇部署好Ingress,访问地址是:
http://192.168.99.200:30046
https://192.168.99.200:31304
准备测试环境 vi ingress-demo.yaml
apiVersion: apps/v1 kind: Deployment metadata: name: hello-server spec: replicas: 2 selector: matchLabels: app: hello-server template: metadata: labels: app: hello-server spec: containers: - name: hello-server image: registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images/hello-server ports: - containerPort: 9000 --- apiVersion: apps/v1 kind: Deployment metadata: labels: app: nginx-demo name: nginx-demo spec: replicas: 2 selector: matchLabels: app: nginx-demo template: metadata: labels: app: nginx-demo spec: containers: - image: nginx name: nginx --- apiVersion: v1 kind: Service metadata: labels: app: nginx-demo name: nginx-demo spec: selector: app: nginx-demo ports: - port: 8000 protocol: TCP targetPort: 80 --- apiVersion: v1 kind: Service metadata: labels: app: hello-server name: hello-server spec: selector: app: hello-server ports: - port: 8000 protocol: TCP targetPort: 9000
分别部署了2台tomcat和nginx,服务名称是 hello-server、nginx-demo
kubectl apply -f ingress-demo.yaml
kubectl get svc
配置域名访问规则 vi ingress-rule.yaml
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: ingress-host-bar spec: ingressClassName: nginx rules: - host: "hello.intmall.com" http: paths: - pathType: Prefix path: "/" backend: service: name: hello-server port: number: 8000 - host: "demo.intmall.com" http: paths: - pathType: Prefix path: "/" # 把请求会转给下面的服务,下面的服务一定要能处理这个路径,不能处理就是404 backend: service: name: nginx-demo ## java,比如使用路径重写,去掉前缀nginx port: number: 8000
#hello.intmall.com把请求转发给服务hello-server kubectl apply -f ingress-rule.yaml #出现错误:Error from server (InternalError): error when creating "ingress-rule.yaml": Internal error occurred: failed calling webhook "validate.nginx.ingress.kubernetes.io": Post "https://ingress-nginx-controller-admission.ingress-nginx.svc:443/networking/v1beta1/ingresses?timeout=10s": dial tcp 10.96.220.170:443: connect: network is unreachable #解决方法:找到validatingwebhookconfigurations 配置列表删除配置 kubectl get validatingwebhookconfigurations kubectl delete -A ValidatingWebhookConfiguration ingress-nginx-admission kubectl apply -f ingress-rule.yaml #参考:https://blog.csdn.net/weixin_45423952/article/details/116294295 kubectl get pods -A #查看集群中ingress的规则 kubectl get ingress #在windows中配置hosts 192.168.99.200 demo.intmall.com hello.intmall.com #在windows浏览器中访问 http://demo.intmall.com:30046/ 请求转发到demo-server #访问 http://hello.intmall.com:30046/ 请求转发到hello-server
修改域名映射
kubectl edit ingress ingress-host-bar
#把host: demo.intmall.com 下面的 path: / 修改成 /nginx,即使用 http://demo.intmall.com:30046/nginx 才能转发请求到 demo-server
在metadata中添加注解 annotations: nginx.ingress.kubernetes.io/rewrite-target: /$2
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: nginx.ingress.kubernetes.io/rewrite-target: /$2 name: ingress-host-bar spec: ingressClassName: nginx rules: - host: "hello.intmall.com" http: paths: - pathType: Prefix path: "/" backend: service: name: hello-server port: number: 8000 - host: "demo.intmall.com" http: paths: - pathType: Prefix path: "/nginx(/|$)(.*)" # 把请求会转给下面的服务,下面的服务一定要能处理这个路径,不能处理就是404 backend: service: name: nginx-demo ## java,比如使用路径重写,去掉前缀nginx port: number: 8000
#转发请求时,去除 http://demo.intmall.com:30046/nginx 后面的nginx 路径
kubectl apply -f ingress-rule.yaml
#http://demo.intmall.com:30046/nginx 会直接把请求转发到 demo-server 的根路径
在metadata中添加注解 annotations: nginx.ingress.kubernetes.io/limit-rps: “1”
设置访问的限制为每秒1次 vi ingress-rule2.yaml
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: ingress-limit-rate annotations: nginx.ingress.kubernetes.io/limit-rps: "1" spec: ingressClassName: nginx rules: - host: "haha.intmall.com" http: paths: - pathType: Exact path: "/" backend: service: name: nginx-demo port: number: 8000
kubectl apply -f ingress-rule2.yaml
#查看集群中ingress的规则,等待分配ip地址
kubectl get ingress
#在windows中配置hosts
192.168.99.200 demo.intmall.com hello.intmall.com haha.intmall.com
#访问 http://haha.intmall.com:30046 快速刷新
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。