如何为Istio Ingress Gateway添加自定义端口?

7

我是istio的新手。我有一个简单的入口网关yaml文件,监听端口是26931,但是在我应用了该yaml文件后,26931端口没有出现在入口网关暴露的端口集合中。所以我是否缺少一些必要的步骤或其他东西?

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: batman-gateway
spec:
  selector:
    istio: ingressgateway
  servers:
  - port:
      number: 26931
      name: http
      protocol: HTTP
    hosts:
    - "*"

你正在使用哪个版本的Istio? - dassum
Istio的版本是1.1.7 - leo
3个回答

10
你正在使用istio-ingressgateway服务暴露端口,而不是使用Gateway对象。
kubectl edit svc istio-ingressgateway -n istio-system

如果您想公开端口26931,应该使用网关服务来完成。

  ports:
  - name: http
    nodePort: 30001
    port: 26931
    protocol: TCP
    targetPort: 80

我也在您之前的帖子“如何配置istio中的入口网关?”上发表了评论。


我正在寻找在Helm图表中添加新端口的选项,但似乎该选项不存在,因此采用了编辑服务的方法。 - Deepak Deore

7

如果使用以下命令(参见官方文档),通过istioctl安装Istio 1.5.1:

istioctl manifest apply -f your-overlay-config.yaml

额外的端口可以在your-overlay-config.yaml文件中的components.ingressGateways部分指定。例如:
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
metadata:
  namespace: istio-system
spec:
  components:
    citadel:
      enabled: true
    sidecarInjector:
      enabled: true
    telemetry:
      enabled: true
    ingressGateways:
      - name: istio-ingressgateway
        enabled: true
        k8s:
          service:
            ports:
              # We have to specify original ports otherwise it will be erased
              - port: 15020
                targetPort: 15020
                name: status-port
              - port: 80
                targetPort: 80
                name: http2
              - port: 443
                name: https
              - port: 15029
                targetPort: 15029
                name: kiali
              - port: 15030
                targetPort: 15030
                name: prometheus
              - port: 15031
                targetPort: 15031
                name: grafana
              - port: 15032
                targetPort: 15032
                name: tracing
              - port: 15443
                targetPort: 15443
                name: tls
              - port: 31400
                name: tcp
              # Your additional ports
              - port: 10000
                name: misc
  addonComponents:
    prometheus:
      enabled: false
  values:
    sidecarInjectorWebhook:
      enableNamespacesByDefault: true
    global:
      proxy:
        accessLogFile: "/dev/stdout"
    gateways:
      istio-egressgateway:
        enabled: false
      istio-ingressgateway:
        sds:
          enabled: true

值得注意的是,在 Istio 1.5 和 Istio 1.4 版本中,端口必须在 values.gateways.istio-ingressgateway 部分指定。

我正在使用Istio 1.5.1,尝试在安装中找到此配置文件,但有数百个文件,您知道具体的文件名吗? - Tiago Medici
你需要自己创建这个文件。该文件用于覆盖默认配置。你可能想查看这份文档自定义配置。默认配置取决于你正在安装的配置文件。你可以在<istio_dir>/install/kubernetes/operator/profiles/下找到这些配置文件。 - peppered
谢谢您,奇怪的是我已经在k8s上部署了一个应用程序,使用网关和虚拟服务,并使用istio-ingressgateway负载均衡器在端口80:32653/TCP上...但是出现了404错误...在k8s仪表板上我没有看到任何入口。 - Tiago Medici
那个例子是从哪里来的?这些似乎不是默认值。 - Exagone313
1
目前的默认值可以在 istio 存储库中的 manifests/profiles/default.yaml 中检索。 - Exagone313
对于最新版本,上面的链接中默认的“ports”值不再在“default.yaml”中,而是在此处找到的“demo.yaml”中:https://github.com/istio/istio/blob/35b6de45318e1f52544fd747f532732aac639f5d/manifests/profiles/demo.yaml#L25 - Jethro

5

端口设置是在网关的Helm子图表中完成的。您无需直接编辑服务,可以在Istio的values.yaml中以以下方式声明性地定义其他端口。

注意:自Istio v1.2和v1.3.0起,原始子图表中定义的默认端口列表将被覆盖。为了保持默认值不变,下面的代码片段有一些硬编码的值。

gateways:
  istio-ingressgateway:
    ports:
      # Default port list copied from the original subchart values
      # Ref: https://github.com/istio/istio/blob/release-1.2/install/kubernetes/helm/istio/charts/gateways/values.yaml
      #      (the ports below override the default and do not get merged, and thus need to be copied here)
      - port: 15020
        targetPort: 15020
        name: status-port
      - port: 80
        targetPort: 80
        name: http2
        nodePort: 31380
      - port: 443
        name: https
        nodePort: 31390
      - port: 15029
        targetPort: 15029
        name: https-kiali
      - port: 15030
        targetPort: 15030
        name: https-prometheus
      - port: 15031
        targetPort: 15031
        name: https-grafana
      - port: 15032
        targetPort: 15032
        name: https-tracing
        # This is the port where sni routing happens
      - port: 15443
        targetPort: 15443
        name: tls
      ##=== Additional Ports =======================##
      - port: 8080
        targetPort: 8080
        name: http-custom
      - port: 8081
        targetPort: 8081
        name: http-custom-backup
      ##____________________________________________##

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接