入口规则未重定向到部署

时间:2019-02-11 11:28:22

标签: nginx kubernetes kubernetes-ingress azure-kubernetes azure-aks

入口

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一起使用。

3 个答案:

答案 0 :(得分:1)

首先检查您的Pod是否处于运行状态。

可能是因为过多的端口从80重定向到8080导致无法服务到目标端口。

您的配置是绝对正确的,这很简单,问题可能是pod无法运行或等待一段时间才能清除浏览器的缓存。

答案 1 :(得分:0)

将TLS与Ingress一起使用时,还有两种使用证书的方式。

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

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

当您使用通过公共IP在Azure中设置的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)中的步骤进行操作。我建议这样。试试看。

答案 2 :(得分:0)

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

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

完全删除上述配置。