我们在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入口一起工作?
预先感谢您的帮助.
最好的祝福
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上运行(使用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) 在 GKE 上,K8s Ingress 是 Compute Engine 提供的负载均衡器,它们有一定的成本。例如 2 个月我支付了 16.97 欧元。
在我的集群中,我有 3 个命名空间(default,dev和prod),因此为了降低成本,我想避免产生 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 的新手,这是我使用它的第一个项目。
我想要做的基本上就是这个。我有一个 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) 我正在使用带有 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) 我们在 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 等)?
假设我在 k8s 中创建了多个入口对象,它们指向相同的服务、相同的路径并且完全相同,只是它们的名称不同,例如-。ingress-1和ingress-2。在这种情况下如何处理请求?请求是重复的还是入口处理请求?
PS;-我知道这没有多大意义,但我正在测试一些东西。
目前,我正在使用网络负载均衡器公开 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
我正在尝试设置 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