【问题标题】:Helm skips creation of istio virtual serviceHelm 跳过了 istio 虚拟服务的创建
【发布时间】:2020-06-30 20:43:22
【问题描述】:

我正在尝试使用以下结构为我的服务创建掌舵图:

.
├── my-app
│   ├── Chart.yaml
│   ├── templates
│   │   ├── deployment.yaml
│   │   ├── istio-virtualservice.yaml
│   │   └── service.yaml
│   └── values.yaml

安装 helm chart 后,部署和服务已成功创建,但未创建虚拟服务。

$ helm install -name my-app ./my-app -n my-namespace
$ kubectl get pods -n my-namespace
NAME                              READY   STATUS    RESTARTS   AGE
my-app-5578cbb95-xzqzk            2/2     Running   0          5m

$ kubectl get vs
NAME                 GATEWAYS               HOSTS                         AGE
<Empty>

我的 istio 虚拟服务 yaml 文件如下所示:

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: my-virtual-service
spec:
  hosts:
    - {{$.Values.props.host | quote}}
  gateways:
    - my-api-gateway
  http:
    - match:
        - uri:
            prefix: /app/
      rewrite:
        uri: "/"
      route:
        - destination:
            port:
              number: 8083
            host: my-service.my-namespace.svc.cluster.local

令人惊讶的是,如果我在 helm install 完成部署应用程序后应用上述 yaml,那么就会创建虚拟服务。

$ kubectl apply -f istio-vs.yaml
$ kubectl get vs
NAME                 GATEWAYS               HOSTS                         AGE
my-virtual-service   [my-api-gateway]   [my-host.com]                     60s

请帮我调试问题,如果需要更多调试信息,请告诉我。

$ helm version
version.BuildInfo{Version:"v3.0.1", GitCommit:"7c22ef9ce89e0ebeb7125ba2ebf7d421f3e82ffa", GitTreeState:"clean", GoVersion:"go1.13.4"}
$ istioctl version
client version: 1.4.1
control plane version: 1.4.1
data plane version: 1.4.1 (2 proxies)
$ kubectl version
Client Version: version.Info{Major:"1", Minor:"16+", GitVersion:"v1.16.6-beta.0", GitCommit:"e7f962ba86f4ce7033828210ca3556393c377bcc", GitTreeState:"clean", BuildDate:"2020-01-15T08:26:26Z", GoVersion:"go1.13.5", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"16+", GitVersion:"v1.16.6-beta.0", GitCommit:"e7f962ba86f4ce7033828210ca3556393c377bcc", GitTreeState:"clean", BuildDate:"2020-01-15T08:18:29Z", GoVersion:"go1.13.5", Compiler:"gc", Platform:"linux/amd64"}

【问题讨论】:

  • 你看到用--dry-run -o yaml渲染的虚拟服务了吗?
  • 是的,我在试运行中得到了这个。我也试过helm template ./my-app|kubectl apply -n my-ns -f -,仍然没有创建虚拟服务。

标签: kubernetes kubernetes-helm istio


【解决方案1】:

使用

kubectl get vs -n my-namespace

而不是

kubectl get vs

那是因为您已经在 my-namespace 命名空间中部署了所有内容。

helm install -name my-app ./my-app -n my-namespace

您正在 default 命名空间中搜索 virtual service


当你自己应用它时它会起作用,因为虚拟服务 yaml 中没有命名空间,它部署在默认的命名空间中。


附加信息,我看到你已经部署了gateway,如果它与虚拟服务不在同一个命名空间中,你应该像下面的例子一样添加它。

查看spec.gateways 部分

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: bookinfo-Mongo
  namespace: bookinfo-namespace
spec:
  gateways:
  - some-config-namespace/my-gateway # can omit the namespace if gateway is in same
                                       namespace as virtual service.

我希望这能回答您的问题。如果您还有其他问题,请告诉我。

【讨论】:

  • 好的,vs 正在指定的命名空间中创建,我错过了。但是spec.gateways 中的那一点有助于让事情顺利进行。谢谢。
猜你喜欢
  • 2021-12-12
  • 2019-08-12
  • 1970-01-01
  • 2021-09-21
  • 1970-01-01
  • 1970-01-01
  • 2019-07-19
  • 2021-06-09
  • 2019-07-06
相关资源
最近更新 更多