标签: kubernetes-ingress

如何正确配置k8s nginx入口基URL替换来处理Angular客户端路由(LocationStrategy)?

我们在Kubernetes集群上托管了基于Angular的Web应用程序.此应用程序的Ingress配置为添加基本URL:

{
  "kind": "Ingress",
  "apiVersion": "extensions/v1beta1",
  "metadata": {
    "name": "test-app",
    "namespace": "acceptance-testing",
    ...
    "annotations": {    
      "kubernetes.io/ingress.class": "nginx",
      "nginx.ingress.kubernetes.io/add-base-url": "true",
      "nginx.ingress.kubernetes.io/rewrite-target": "/",
      "nginx.ingress.kubernetes.io/ssl-redirect": "true"
    }
  },
  "spec": {
    "rules": [
      {
        "http": {
          "paths": [
            {
              "path": "/at/test-app",
              "backend": {
                "serviceName": "test-app",
                "servicePort": 80
              }
            }
          ]
        }
      }
    ]
  },
  ...
}
Run Code Online (Sandbox Code Playgroud)

当我们在浏览器中输入包含客户端路由部分的URL时,ingress会将整个URL添加为在我们的场景中不正确的基础.

例如,对于https:// server/at/test-app/some-page请求基本URL应为https:// server/at/test-app /但我们接收https:// server/at/test-app /一些页/

我们已经切换到Angular哈希路由位置策略,现在它正常工作但我们想知道是否有某种方法使位置路由策略与nginx入口一起工作?

预先感谢您的帮助.

最好的祝福

nginx angular angular-router kubernetes-ingress

7
推荐指数
1
解决办法
2576
查看次数

获取Kubernetes Ingress端点/ IP地址

Base OS : CentOS (1 master 2 minions)
K8S version : 1.9.5 (deployed using KubeSpray)
Run Code Online (Sandbox Code Playgroud)

我是Kubernetes Ingress的新手,我正在设置两种不同的服务,每种服务都有自己的路径.

我创建了2个部署:

kubectl run nginx --image=nginx --port=80
kubectl run echoserver --image=gcr.io/google_containers/echoserver:1.4 --port=8080
Run Code Online (Sandbox Code Playgroud)

我也创建了相应的服务:

kubectl expose deployment nginx --target-port=80 --type=NodePort
kubectl expose deployment echoserver --target-port=8080 --type=NodePort
Run Code Online (Sandbox Code Playgroud)

svc是:

[root@node1 kubernetes]# kubectl get svc
NAME         TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
echoserver   NodePort   10.233.48.121   <none>        8080:31250/TCP   47m
nginx        NodePort   10.233.44.54    <none>        80:32018/TCP     1h
Run Code Online (Sandbox Code Playgroud)

我的NodeIP地址是172.16.16.2,我可以使用

http://172.16.16.2:31250 &
http://172.16.16.2:32018
Run Code Online (Sandbox Code Playgroud)

现在,除此之外,我想部署一个Ingress,这样我就可以不使用2个IP和2个不同的端口来访问两个端口,但是使用不同路径的1个IP地址.

所以我的Ingress文件是:

apiVersion: extensions/v1beta1
kind: Ingress
metadata: …
Run Code Online (Sandbox Code Playgroud)

kubernetes kubernetes-ingress

7
推荐指数
1
解决办法
2万
查看次数

Kubernetes Ingress Nginx加载资源404

海兰

我们正在尝试使我们的网站在kubernetes上运行(使用nginx在容器中运行)。我们使用入口路由到站点,这是我们的配置:

nginx-conf:

server {
  listen 80;
  location / {
    root /usr/share/nginx/html;
    index index.html index.htm;
    try_files $uri $uri/ /index.html =404;
  }
}
Run Code Online (Sandbox Code Playgroud)

Kubernetes部署:

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: mywebsite
spec:
  replicas: 2
  template:
    metadata:
      labels:
        app: mywebsite
    spec:
      containers:
      - name: mywebsite
        image: containerurl/xxx/mywebsite:latest
        ports:
        - containerPort: 80

---
apiVersion: v1
kind: Service
metadata:
  name: mywebsite
spec:
  ports:
  - port: 82
    targetPort: 80

  selector:
    app: mywebsite
Run Code Online (Sandbox Code Playgroud)

入口配置:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: myIngress
  annotations:
    kubernetes.io/tls-acme: "true"
    nginx.ingress.kubernetes.io/rewrite-target: / …
Run Code Online (Sandbox Code Playgroud)

nginx kubernetes kubernetes-ingress nginx-config

7
推荐指数
1
解决办法
1311
查看次数

Google Kubernetes Engine:如何为多个命名空间定义一个 Ingress?

在 GKE 上,K8s Ingress 是 Compute Engine 提供的负载均衡器,它们有一定的成本。例如 2 个月我支付了 16.97 欧元。

在我的集群中,我有 3 个命名空间(default,devprod),因此为了降低成本,我想避免产生 3 个 LoadBalancer。问题是如何配置当前的指向正确的命名空间?

GKE 要求入口的目标 Service 类型为NodePort,由于该限制,我被卡住了。

我想做类似的事情:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
 namespace: dev
 annotations: # activation certificat ssl
   kubernetes.io/ingress.global-static-ip-name: lb-ip-adress     
spec:
 hosts:
    - host: dev.domain.com 
      http:
        paths:
          - path: /*
            backend:
              serviceName: dev-service # This is the current case, 'dev-service' is a NodePort
              servicePort: http

    - host: domain.com 
      http:
        paths:
          - path: /*
            backend:
              serviceName: …
Run Code Online (Sandbox Code Playgroud)

kubernetes google-kubernetes-engine kubernetes-ingress

7
推荐指数
1
解决办法
3592
查看次数

带有 ingress-nginx 的 kubernetes 中的 Django 不提供静态文件

我是 Kubernetes 的新手,这是我使用它的第一个项目。

我想要做的基本上就是这个。我有一个 Django 应用程序和一个 React 应用程序。我想使用 kubernetes 自己的入口 nginx 库 (kubernetes/ingress-nginx) 使用单个 ingress-nginx 为它们提供服务,React 应用程序在 root 中提供服务,而 Django 在“/api”根中提供服务。我在 Django 设置中定义了 FORCE_SCRIPT_NAME。

同样对于静态文件,我创建了一个单独的持久卷声明并将其安装在 Django 部署文件中。但是当我点击 Django 的管理页面时,不提供静态文件。并且媒体文件也在 api/api/media... 路径中提供,该路径具有额外的 api。在 Kubernetes 中提供静态文件的正确方法是什么?我不想使用像 S3 这样的在线静态根。这是我的 Django 部署 yaml。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: django
  labels:
    deployment: django
spec:
  replicas: 1
  selector:
    matchLabels:
      pod: django
  template:
    metadata:
      labels:
        pod: django
    spec:
      volumes:
        - name: django-configmap-volume
          configMap:
            name: django-configmap
        - name: static-volume
          persistentVolumeClaim:
            claimName: static-volume
        - name: media-volume
          persistentVolumeClaim:
            claimName: …
Run Code Online (Sandbox Code Playgroud)

django nginx kubernetes kubernetes-ingress nginx-ingress

7
推荐指数
1
解决办法
1156
查看次数

使用 GKE Ingress 时对 readinessProbe 使用 HTTP 基本身份验证

我正在使用带有 GKE的nosqlclient docker映像。有一个默认的健康检查 URL 可用于/healthcheck 中的图像。但是,当我尝试为应用程序启用身份验证时,它也会为此 URL 启用身份验证。我需要将 GKE Ingress 与应用程序一起使用。GKE Ingress 要求我创建一个可以返回 200 的 HTTP readinessProbe。但是,当我尝试使用此路径进行 readinessCheck 时,就绪性检查无法工作。奇怪的是,当我运行kubectl describe pods <pod_name>. 这是我的部署 yaml 文件的一部分:

...
    spec:
      containers:
      - name: mongoclient
        image: mongoclient/mongoclient:2.2.0
        resources:
          requests:
            memory: "32Mi"
            cpu: "100m"
          limits:
            memory: "128Mi"
            cpu: "500m"
        ports:
        - containerPort: 3000
        env:
        - name: MONGOCLIENT_AUTH
          value: "true"
        - name: MONGOCLIENT_USERNAME
          value: "admin"
        - name: MONGOCLIENT_PASSWORD
          value: "password"
        readinessProbe:
          httpGet:
            httpHeaders:
              - name: "Authorization"
                value: "Basic YWRtaW46cGFzc3dvcmQ="           
            port: …
Run Code Online (Sandbox Code Playgroud)

kubernetes google-kubernetes-engine kubernetes-ingress

7
推荐指数
0
解决办法
1566
查看次数

没有 Nodeport 的 Kubernetes 入口控制器

我们在 GKE(谷歌 kubernetes 引擎)上运行 API 服务器。我们使用 Google Cloud Endpoints 和 API 密钥处理我们的授权。我们将每个 API 密钥的某些 IP 地址列入白名单。为了完成这项工作,我们必须从负载均衡器转换为入口控制器,以暴露我们的 API 服务器。IP 白名单不适用于负载均衡器服务。现在我们有一个类似于这样的入口设置:

apiVersion: v1
kind: Service
metadata:
  name: echo-app-nodeport
spec:
  ports:
  - port: 80
    targetPort: 8080
    protocol: TCP
    name: http
  selector:
    app: esp-echo
  type: NodePort
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: echo-app-ingress
  annotations:
    kubernetes.io/ingress.global-static-ip-name: "RESERVED_IP"
    kubernetes.io/ingress.allow-http: "false"
spec:
  tls:
  - secretName: SECRET_NAME
  backend:
    serviceName: echo-app-nodeport
    servicePort: 80
Run Code Online (Sandbox Code Playgroud)

此设置运行良好,IP 白名单工作正常。现在我关心的主要是 NodePort,它似乎需要让入口控制器工作。我阅读了多个来源[1] [2],强烈建议不要使用 NodePorts 来公开您的应用程序。然而,我发现的大多数示例都使用了这个 NodePort + Ingress 组合。我们可以安全地使用此设置还是应该迁移到其他入口控制器(NGINX、Traefik 等)?

kubernetes google-kubernetes-engine kubernetes-ingress

7
推荐指数
1
解决办法
320
查看次数

Kubernetes 具有相同配置的多个入口对象

假设我在 k8s 中创建了多个入口对象,它们指向相同的服务、相同的路径并且完全相同,只是它们的名称不同,例如-。ingress-1ingress-2。在这种情况下如何处理请求?请求是重复的还是入口处理请求?

PS;-我知道这没有多大意义,但我正在测试一些东西。

kubernetes kubectl kubernetes-ingress

7
推荐指数
2
解决办法
4291
查看次数

如何使用基于目标组“IP”的 [AWS] 设置 Kubernetes NLB 负载均衡器?

目前,我正在使用网络负载均衡器公开 k8s 服务。它创建了一个网络负载均衡器并将目标组设置为基于实例,一切正常。正如我们所知,节点中的端口始终在 30000 - 32767 的范围内。

不同的目标群体存在差异。基于实例的目标组用于保留客户端 IP,其中基于 IP 的目标组不保留客户端 IP。

现在安全组有问题,我想限制节点端口只能由负载均衡器的CIDR访问。由于它是基于实例的目标组,因此入站 IP 始终是客户端 IP。因此很难限制仅对某些 IP 的访问。

所以我的计划是将目标组切换到基于“IP”的组,这样我就可以限制对负载均衡器的 CIDR 的访问。

有没有其他方法可以使用基于 IP 的目标类型创建 NLB 负载平衡器?你能帮我一些建议吗?

apiVersion: v1
kind: Service
metadata:
  name: nginx-router
  annotations:
    service.beta.kubernetes.io/do-loadbalancer-protocol: "http"
    service.beta.kubernetes.io/do-loadbalancer-healthcheck-path: "/healthz"
    service.beta.kubernetes.io/aws-load-balancer-type: "nlb"
    service.beta.kubernetes.io/aws-target-type: ip
    service.beta.kubernetes.io/aws-load-balancer-ssl-cert: [tes]

    # service.beta.kubernetes.io/healthcheck-path: /healthz
spec:
  selector:
    app: nginx-router
  externalTrafficPolicy: Local
  ports:
    - port: 80
      targetPort: 80
      protocol : TCP
      name : http
    - port : 443
      targetPort: 443
      protocol : TCP
      name : https

  type: LoadBalancer
Run Code Online (Sandbox Code Playgroud)

amazon-web-services kubernetes kubectl kubernetes-helm kubernetes-ingress

7
推荐指数
1
解决办法
962
查看次数

AWS Nginx Ingress 创建 Classic Load Balancer 而不是 Application Load Balancer

我正在尝试设置 Application Load Balancer 以将流量转发到 AWS 中的 Nginx Ingress 控制器。为了设置 Nginx Ingress 控制器,我使用了这个YML,它是从安装说明中得到的

部署后,一切正常,流量正确转发到 EKS Pod。但是,上面的 YML 文件正在aws 中创建“ Classic Load Balancer ”,因为我想创建“ Application Load Balancer ”。我将“ service.beta.kubernetes.io/aws-load-balancer-type: elb ”更改为“ service.beta.kubernetes.io/aws-load-balancer-type: alb ”但它仍然在创建经典负载均衡器亚马逊。

请帮助设置所需的 LB。提前致谢。

nginx amazon-web-services kubernetes kubernetes-ingress nginx-ingress

7
推荐指数
1
解决办法
3243
查看次数