入口规则不会重定向到部署

问题描述 投票:0回答:3

入口

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: assortment-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  tls:
  - hosts:
    - myapp.centralus.cloudapp.azure.com
    secretName: aks-ingress-tls
  rules:
  - host: myapp.centralus.cloudapp.azure.com
    http:
      paths:
      - path: /my-service
        backend:
          serviceName: my-backend
          servicePort: 80

部署和服务

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: my-deployment
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: myservice
    spec:
      containers:
      - name: myservice
        image: myreg.azurecr.io/my-latest
        imagePullPolicy: Always
        ports:
           - name: http
             containerPort: 8080
      imagePullSecrets:
      - name: my-auth

apiVersion: v1
kind: Service
metadata:
 name: my-backend
spec:
 type: ClusterIP
 selector:
   app: myservice
 ports:
  - name: http
    protocol: TCP
    port: 80
    targetPort: 8080

然而

curl https://myapp.centralus.cloudapp.azure.com/my-service

默认后端 - 404

注意myapp.centralus.cloudapp.azure.com已经解析为入口控制器的公共IP

当我使用具有相同配置的类型LoadBalancer创建服务时,它适用于公共API。

nginx kubernetes kubernetes-ingress azure-kubernetes azure-aks
3个回答
1
投票

首先检查你的pod是否处于运行状态。

要么

可能导致太多端口从80重定向到8080.ingress服务到目标端口。

你的配置绝对正确它是简单的问题可能是pod没有运行或等待一段时间与清除缓存的浏览器。


0
投票

将TLS与Ingress一起使用时,还有两种方法可以使用证书。

一个是使用您自己的证书。您可以按照Create an HTTPS ingress controller and use your own TLS certificates on Azure Kubernetes Service (AKS)中的步骤操作。但为此,您只需访问以下URL:

curl -v -k --resolve demo.azure.com:443:yourIngressExternalIP https://demo.azure.com

当您使用在Azure中使用公共IP设置的DNS名称时,可以在您的情况下创建这样的证书:

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
    -out aks-ingress-tls.crt \
    -keyout aks-ingress-tls.key \
    -subj "/CN=myapp.centralus.cloudapp.azure.com/O=aks-ingress-tls"

然后你可以起诉命令curl https://myapp.centralus.cloudapp.azure.com,但它会显示如下:

enter image description here

当您使用浏览器访问URL时,它将显示如下:

enter image description here

要使用其他方式,您可以按照Create an ingress controller with a static public IP address in Azure Kubernetes Service (AKS)中的步骤操作。我建议这样。试一试。


0
投票

问题是,当通过nginx控制器访问后端应用程序时,添加了以下标头

X-FORWARDED-PROTO: https
X-FORWARDED-PORT: 443

虽然通过LoadBalancer的公共IP访问它不是问题当我们添加标题时可以重现该问题

curl -v 104.43.164.105 -H "X-Forwarded-Proto: https"

给302找到

application.yaml中的以下spring-boot配置不喜欢这些额外的头文件

server:
  useForwardHeaders: true

这是固定的

server:
  useForwardHeaders: false

要么

完全删除上述配置。

© www.soinside.com 2019 - 2024. All rights reserved.