研究下istio对kubernetes gateway api的支持程度(二)

基本架构

首先简单了解下kubernetes gateway api这个东东

https://github.com/kubernetes-sigs/gateway-api

顾名思义是个api,所以只定义了api,并不负责实现。它这个controller只负责validate CRD,然后什么也不干。

从语法来看目前只支持如下几种

This version of the API is has beta level support for the following resources:

  • v1beta1.GatewayClass
  • v1beta1.Gateway
  • v1beta1.HTTPRoute

具体从gatewayClassName可以看出,设置了谁家的实现,需要谁家自己来认领实现。

apiVersion: gateway.networking.k8s.io/v1alpha2
kind: Gateway
metadata:
  name: gateway
  namespace: istio-ingress
spec:
  gatewayClassName: istio

可以说写了istio就是由istio controller自身来reconcile这个额外的CRD

最终的谜底将会在istio的代码中解答

那么gateway-api controller不干活,只有istio controller干活,去istio代码找实现就对了

找到具体实现的代码在这里

https://github.com/istio/istio/blob/master/pilot/pkg/config/kube/gateway/conversion.go

func buildDestination(ctx ConfigContext, to k8s.BackendRef, ns string) (*istio.Destination, *ConfigError) {
部分省略…………
	if nilOrEqual((*string)(to.Group), "") && nilOrEqual((*string)(to.Kind), gvk.Service.Kind) {
		// Service

	if nilOrEqual((*string)(to.Group), features.MCSAPIGroup) && nilOrEqual((*string)(to.Kind), "ServiceImport") {
		// Service import

	if nilOrEqual((*string)(to.Group), gvk.ServiceEntry.Group) && nilOrEqual((*string)(to.Kind), "Hostname") {
		// Hostname synthetic type
部分省略…………
	return &istio.Destination{}, &ConfigError{
		Reason:  InvalidDestinationKind,
		Message: fmt.Sprintf("referencing unsupported backendRef: group %q kind %q", emptyIfNil((*string)(to.Group)), emptyIfNil((*string)(to.Kind))),
	}

显然backendRefs就实现了三种gvk

  1. 原生kube Service对象
  2. Multi-Cluster Service APIsServiceImport 对象
  3. 原生kube ServiceEntry对象

当你在backendRefs没有显式地写kind,默认就是Service类型。

至此谜底揭晓。那么有没有可能实现VirtualService呢?

也不是没有可能。有时没事关注下这个函数就可以了。

剩下的一点疑惑

至于istio controller有没有产生中间转换的VirtualService呢?

毕竟你都已经把引用的gvr都写在这里了

"config": "/apis/networking.istio.io/v1alpha3/namespaces/default/virtual-service/http-0-istio-autogenerated-k8s-gateway"

然而的确没有,无论是kubectl get,还是直接curl apiserver查询,都查不到。

然而的然而,这里到底有没有转换已经并不重要了。

回到最初

最后谈一下最初使用openkruise/rollouts的疑惑。

究竟能使用istio到何种程度?

现在看就是跟nginx ingress一样的程度。区别不大。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值