当前位置: 首页 > 知识库问答 >
问题:

使用Istio,是否有办法将入口路由到未运行特使侧车的k8s群集服务?

经国安
2023-03-14

我正在运行一个带有Windows和Linux虚拟机的Azure AKS群集。

我可以从Istio命名空间中的Pod中按名称卷曲群集服务,因此我知道Pod的TCP工作原理。我认为我需要以某种方式通知我的虚拟服务,不要通过特使代理路由,而只是将请求直接转发到k8s服务终结点——类似于它是网格外部的虚拟机。我确实有终止于网关的TLS——k8s服务本身就在端口80上的集群内部公开。

目前,Windows容器没有特使侧车,但从k8s的角度来看,这只是Istio运行的同一集群中的另一个服务。

http网关。亚马尔

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  annotations:
  name: http-gateway
  namespace: istio-system
spec:
  selector:    
    istio: ingressgateway
  servers:
  - hosts:
    - "*.myapp.com"
    port:
      number: 80
      name: http-80-gateway
      protocol: HTTP
    tls:
      httpsRedirect: true # sends 301 redirect for http requests
  - hosts:
    - "*.myapp.com"
    port:
      number: 443
      name: https-443-gateway
      protocol: HTTPS
    tls:
      credentialName: cert-azure-dns
      privateKey: sds
      serverCertificate: sds
      mode: SIMPLE

虚拟服务。亚马尔

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: myapp-vsvc
  namespace: myapp-ns
spec:
  hosts:
  - foo #external DNS name is foo.myapp.com; gateway host for HTTPS is '*.myapp.com'
  gateways:
  - istio-system/http-gateway
  http:
  - route:
    - destination:
        host: myapp-svc.myapp-ns.svc.cluster.local
        port:
          number: 80

尝试特使穿越我添加了一个ServiceEntry,如下所示:

apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
  name: myapp-se
  namespace: myapp-ns
spec:
  hosts:
  - myapp-svc.myapp-ns.svc.cluster.local
  ports:
  - number: 80
    name: http
    protocol: HTTP
  resolution: DNS
  location: MESH_EXTERNAL

服务器响应是一个404,其“server”头值为“istio”。

DNS正在正确解析到网关,并且极致证书有效-因此此错误通常表示我已将其发送到虚拟服务,但尚未路由到群集服务。在Kiali中,我的任何yaml定义都没有Istio验证错误:虚拟服务、服务条目或网关。

我的全球。境外交通政策。模式设置为“允许任何”。

我想知道为集群服务声明“外部网格”是否有问题?Istio知道k8s服务存在,所以它是否试图优先路由到特使侧车,而忽略我的服务条目注册?

对于特定的IP范围,有一个完全绕过特使的选项,如果我能在这个特定的集群服务上设置一个静态IP,这将是一个选项。我想绕过特使进入这个单集群服务。

共有2个答案

狄英哲
2023-03-14

我可以发誓我以前尝试过这个,但显然我需要提供的只是一个简单的虚拟服务,没有任何目的地规则或服务入口。

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: myapp-vsvc
  namespace: myapp-ns
spec:
  hosts:
  - foo.myapp.com 
  gateways:
  - istio-system/http-gateway
  http:
  - route:
    - destination:
        host: myapp-svc.myapp-ns.svc.cluster.local
        port:
          number: 80
包谭三
2023-03-14

您可以使用serviceentry执行以下操作:

apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
  name: httpbin-ext
spec:
  hosts:
  - httpbin.org
  ports:
  - number: 80
    name: http
    protocol: HTTP
  resolution: DNS
  location: MESH_EXTERNAL

https://istio.io/docs/tasks/traffic-management/egress/egress-control/

 类似资料:
  • 这起作用了 这不是

  • 我有一个用于测试本地docker、本地Kubernetes和Istio设置的演示应用程序。最初,我将演示服务公开为type=NodePort,它可以正常工作http://localhost: 部署后,导航到http://localhost/会出现HTTP 404错误。服务、VS、网关在集群上一切看起来都很好。因为我是新来的,我不确定我是否在Istio或库伯内特斯身上错过了一些基本的东西。

  • 我正在测试gke入口以将流量路由到两个不同的服务。我的部署包括一个基本的Web容器,它部署了一个默认的蓝色网页和一个绿色网页。我能够得到响应本质上,“/”适用于蓝色或绿色部署。但是当我转到超文本传输协议:///绿色时,我得到了404响应。我已经用“/”作为绿色部署进行了测试,它显示了一个绿色网页。但是如果我转到超文本传输协议:///蓝色,它会导致404响应, 我已经通过将负载平衡器直接连接到容器上

  • 据我所知,在Google Cloud Run上部署容器有两种方式: 云运行完全管理:它由GCP独立管理,无需我们创建集群 云运行for Anthos:这需要我们创建一个支持云运行的GKE集群 我想选择第二个选项,但希望将GKE集群保持为私有,这样就不允许任何外部通信。

  • 是否可以使用serviceaccount令牌获得k8s群集访问权限? 我的脚本没有访问kubeconfig文件的权限,但是,它可以访问/var/run/secrets/kubernetes处的服务帐户令牌。io/serviceaccount/token。 以下是我尝试过的步骤,但不起作用。 kubectl配置设置凭据sa用户--令牌=$(cat/var/run/secrets/kubernetes

  • 我正在Kubernetes集群中运行2个服务。 价格SVC 服务以“ClusterIP”类型部署,入口(netcalar)位于服务前面。 调度运行良好,我可以从库伯内特斯集群外部访问调度。 现在,尝试从pricesvc访问计划vc。我可以使用ClusterIP服务endpoint或入口。由于我计划在多个数据中心运行库伯内特斯集群,因此我将在DC的Active/Active中运行我的应用程序,因此我