概述
在使用集群的情况下很多时候需要进行代理,当然nginx可以是个不错的选择,但是在k8s中有一个add-on的插件,ingress可以很舒服的达到目的。
安装
安装链接
使用
项目需求
- 我的目的是可以在使用一个域名的情况下,通过请求的不同前缀进行区分服务,用实际例子来说就是:
- http://unioj.org:32366/beego -----> 访问beego服务端
- unioj.org:32366/healthy -----> 访问判题器的健康检测api
- 这里的需求可以看出是由不同的,也就是说第一个需求 http://unioj.org:32366/beego 需要解析出beego并且beego不能出现在后续实际访问集群服务的链接之中;而unioj.org:32366/healthy是需要直接接卸到服务并且healthy直接作为访问链接。
注意
ingress的代理是用于外部访问集群中的服务的,那么如果需要在集群内布进行解析服务可以使用集群内部的coredns等dns服务发现的插件
集群环境
[root@k8s-master1 ingress]
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
unioj-beego-deployment-dc8986bcb-sqr5t 1/1 Running 0 54m 10.100.1.81 k8s-node1 <none> <none>
unioj-judger-deployment-6566bf9f7d-4hd79 1/1 Running 0 25m 10.100.2.151 k8s-node2 <none> <none>
unioj-judger-deployment2-6f4d8cf447-hq8gk 1/1 Running 0 25m 10.100.1.82 k8s-node1 <none> <none>
[root@k8s-master1 ingress]
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 33d
unioj-beego NodePort 10.96.228.118 <none> 8000:30001/TCP,8666:30002/TCP 9d
unioj-judger NodePort 10.96.228.40 <none> 7999:30003/TCP 61m
unioj-judger2 NodePort 10.96.242.224 <none> 7999:30004/TCP 61m
yaml
- http://unioj.org:32366/beego -----> 访问beego服务端 (注意注解和path的后边)
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$2
name: test
spec:
rules:
- host: unioj.org
http:
paths:
- path: /beego(/|$)(.*)
backend:
serviceName: unioj-beego
servicePort: 8000
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
name: judger-test
spec:
rules:
- host: unioj.org
http:
paths:
- path: /healthy
backend:
serviceName: unioj-judger
servicePort: 7999
|