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

Kubernetes Istio入口网关端口

谢高峯
2023-03-14

我有一个在kubernetes pod中运行的应用程序(在我的本地docker桌面上,启用kubernetes),监听端口8080。然后我有以下kubernetes配置

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: myrelease-foobar-app-gw
  namespace: default
spec:
  selector:
    istio: ingressgateway
  servers:
    - port:
        number: 443
        name: https
        protocol: HTTPS
      tls:
        mode: SIMPLE
        credentialName: default-foobar-local-credential
      hosts:
        - test.foobar.local
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: myrelease-foobar-app-vs
  namespace: default
spec:
  hosts:
    - test.foobar.local
  gateways:
    - myrelease-foobar-app-gw
  http:
    - match:
        - port: 443
      route:
        - destination:
            host: myrelease-foobar-app.default.svc.cluster.local
            subset: foobarAppDestination
            port:
              number: 8081
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: myrelease-foobar-app-destrule
  namespace: default
spec:
  host: myrelease-foobar-app.default.svc.cluster.local
  subsets:
    - name: foobarAppDestination
      labels:
        app.kubernetes.io/instance: myrelease
        app.kubernetes.io/name: foobar-app
---
apiVersion: v1
kind: Service
metadata:
  name: myrelease-foobar-app
  namespace: default
  labels:
    helm.sh/chart: foobar-app-0.1.0
    app.kubernetes.io/name: foobar-app
    app.kubernetes.io/instance: myrelease
    app.kubernetes.io/version: "1.0.0"
    app.kubernetes.io/managed-by: Helm
spec:
  type: ClusterIP
  ports:
    - port: 8081
      targetPort: 8080
      protocol: TCP
      name: http
  selector:
    app.kubernetes.io/name: foobar-app
    app.kubernetes.io/instance: myrelease     

这个很好用。但我想把443端口改成其他端口,比如8443(因为我将有多个网关)。当我有这个,我不能再访问应用程序了。是否有一些配置我遗漏了?我猜我需要配置Istio来接受8443端口?我使用以下命令安装了istio:

istioctl install --set profile=default -y

编辑:我读了更多的书(https://www.dangtrinh.com/2019/09/how-to-open-custom-port-on-istio.html),我做了以下工作:

  1. kubectl -n istio-system get service istio-ingressgateway -o yaml > istio_ingressgateway.yaml
  2. edit istio_ingressgateway.yaml, and add the following:
     - name: foobarhttps
       nodePort: 32700
       port: 445
       protocol: TCP
       targetPort: 8445
    
     - port:
         number: 445
         name: foobarhttps
         protocol: HTTPS
    
     http:
     - match:
         - port: 445
    

    但我仍然无法从浏览器访问它(https://foobar.test.local:445)

共有2个答案

司空祯
2023-03-14

修好了。我在上面的编辑中犯了以下错误:

- name: foobarhttps
   nodePort: 32700
   port: 445
   protocol: TCP
   targetPort: 8443

(请注意,targetPort仍然是8443)。我猜8443端口上有一个istio组件在监听,它处理所有这些https内容。感谢用户140547的帮助!

闽鸿宝
2023-03-14

我认为该端口必须映射到Istio入口网关上。因此,如果你想使用自定义端口,你可能需要自定义它。

但通常情况下,如果多个网关使用同一端口,则不会造成冲突。因此,对于这个用例,不需要这样做。

 类似资料:
  • 我正在使用minikube和traefik入口创建一个粘性会话。 因此,我已经完成了kubernetes用户指南提供的traefik的部署。https://docs.traefik.io/user-guide/kubernetes/ 我使用守护程序集部署traefik。因为这是一个小项目,是我第一次使用kubernetes和docker。 这是我的ingress yaml文件 我的服务yaml文件

  • 我尝试使用openshift路由配置istio入口。据我所知,请求路径如下:

  • 我设法在托管提供商(hetzner)的专用服务器上安装了kubernetes 1.22、longhorn、kiali、prometheus和istio 1.12(配置文件=最小)。 然后,我继续使用istio教程中的istio入口网关测试http://http://www. istio. com/。我有一些问题,使此访问从互联网(我设置HAProxy转发本地端口80到Kubernetes中分配的动

  • 这起作用了 这不是

  • 我很难理解Istio网关端口到底是如何使用的。我指的是下面例子中的第14行 从Istio文档中: 代理应在其上侦听传入连接的端口。因此,如果您应用上面的yaml文件并检查istio-ingress网关pod以监听TCP端口,您会发现实际上使用了端口8169(见下面的输出) 但棘手的部分来了。如果在应用Gateway之前更改istio-ingress网关服务如下: 然后应用网关,实际使用的端口不是8

  • 我正在尝试在本地使用wsl2和docker desk运行bookinfo示例。由于连接被拒绝,我试图通过网关访问productpage服务时遇到问题。我不确定我是否错过了什么。以下是我在网上搜索了很多次后所做的事情 部署了bookinfo示例中的所有服务,并且所有服务都处于运行状态,我可以使用kubectl exec从其他服务中创建productpage 使用示例中的文件部署bookinfo网关,