如何在 istio 中编写自定义入口网关?
How to write a custom ingressgateway in istio?
我是 istio 的新手,我有一个简单的测试 yaml 文件,它有点长。我想要做的是为我的网关编写一个自定义入口网关服务。经过测试,错误的部分是最上面的ingressgateway定义。完整的 yaml 如下:
apiVersion: v1
kind: Service
metadata:
name: batman-ingressgateway
labels:
app: batman-ingressgateway
spec:
type: LoadBalancer
selector:
app: batman-ingressgateway
ports:
- port: 80
targetPort: 80
nodePort: 31389
name: http
---
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: batman-gateway
spec:
selector:
app: batman-ingressgateway
#istio: ingressgateway
servers:
- port:
number: 80
name: http
protocol: HTTP
hosts:
- "*"
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: batman
spec:
hosts:
- "*"
gateways:
- batman-gateway
http:
- match:
route:
- destination:
host: batman
port:
number: 8000
subset: v1
weight: 80
- destination:
host: batman
port:
number: 8000
subset: v2
weight: 20
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: batman-destination
spec:
host: batman
subsets:
- name: v1
labels:
version: v1
run: batman
- name: v2
labels:
version: v2
run: batman
我想从浏览器访问我的应用程序,地址如下:http://my_host_ip:31389/article。现在的问题是入口网关不会将流量路由到我的网关。有没有人可以帮助我?
谢谢
有关 istio 网关路由的文档在此处 https://istio.io/docs/tasks/traffic-management/ingress/ingress-control/。
如果您查看网关规范,他们有
selector:
istio: ingressgateway # use Istio default gateway implementation
当你有
selector:
app: batman-ingressgateway
#istio: ingressgateway
关于 VirtualService 的定义你可以看这里https://istio.io/docs/reference/config/networking/v1alpha3/virtual-service/
您可以尝试将对 /article 的请求路由到您的服务
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: article-route
spec:
hosts:
- *
http:
- match:
- uri:
prefix: "/article"
route:
- destination:
host: <name of your service>
我是 istio 的新手,我有一个简单的测试 yaml 文件,它有点长。我想要做的是为我的网关编写一个自定义入口网关服务。经过测试,错误的部分是最上面的ingressgateway定义。完整的 yaml 如下:
apiVersion: v1
kind: Service
metadata:
name: batman-ingressgateway
labels:
app: batman-ingressgateway
spec:
type: LoadBalancer
selector:
app: batman-ingressgateway
ports:
- port: 80
targetPort: 80
nodePort: 31389
name: http
---
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: batman-gateway
spec:
selector:
app: batman-ingressgateway
#istio: ingressgateway
servers:
- port:
number: 80
name: http
protocol: HTTP
hosts:
- "*"
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: batman
spec:
hosts:
- "*"
gateways:
- batman-gateway
http:
- match:
route:
- destination:
host: batman
port:
number: 8000
subset: v1
weight: 80
- destination:
host: batman
port:
number: 8000
subset: v2
weight: 20
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: batman-destination
spec:
host: batman
subsets:
- name: v1
labels:
version: v1
run: batman
- name: v2
labels:
version: v2
run: batman
我想从浏览器访问我的应用程序,地址如下:http://my_host_ip:31389/article。现在的问题是入口网关不会将流量路由到我的网关。有没有人可以帮助我? 谢谢
有关 istio 网关路由的文档在此处 https://istio.io/docs/tasks/traffic-management/ingress/ingress-control/。
如果您查看网关规范,他们有
selector:
istio: ingressgateway # use Istio default gateway implementation
当你有
selector:
app: batman-ingressgateway
#istio: ingressgateway
关于 VirtualService 的定义你可以看这里https://istio.io/docs/reference/config/networking/v1alpha3/virtual-service/ 您可以尝试将对 /article 的请求路由到您的服务
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: article-route
spec:
hosts:
- *
http:
- match:
- uri:
prefix: "/article"
route:
- destination:
host: <name of your service>