当 Ingress Nginx 控制器达到其最大容量时,它会自动扩展吗?Kubernetes Ingress 是否可扩展?
目前,我正在尝试将位于 Apache 负载平衡服务器上的站点迁移到我的 k8s 集群。然而,该应用程序使用 proxypass 和 proxyreversepass 进行了奇怪的设置,如下所示:
ProxyPass /something http://example.com/something
ProxyPassReverse /something http://example.com/something
Run Code Online (Sandbox Code Playgroud)
我想在 Nginx Ingress 中模仿这个
首先,我尝试使用rewrite-target注释,但是它不会保留Location让应用程序再次运行所必需的标头。
然后我尝试proxy-redirect-to/from在特定位置块中放置注释,如下所示:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: gpg-app-ingress
annotations:
nginx.ingress.kubernetes.io/proxy-redirect-from: http://originalapp.com/something
nginx.ingress.kubernetes.io/proxy-redirect-to: http://example.com/something
spec:
rules:
- host: example.com
http:
paths:
- path: /something
backend:
serviceName: example-com
servicePort: 80
Run Code Online (Sandbox Code Playgroud)
我希望能够改用自定义proxy_pass变量,但似乎不可能。
模仿此代理通行证的最佳方法是什么?
我正在设置一个包含入口控制器证书的机密,但在检查入口日志时出现以下错误
入口日志:
W0304 05:47:32.020497 7 controller.go:1153] Error getting SSL certificate "default/auth-tls": local SSL certificate default/auth-tls was not found. Using default certificate
W0304 05:47:32.020516 7 controller.go:1407] Error getting SSL certificate "default/auth-tls": local SSL certificate default/auth-tls was not found
I0304 05:47:32.114777 7 main.go:117] "successfully validated configuration, accepting" ingress="hello-kubernetes-ingress" namespace="default"
Run Code Online (Sandbox Code Playgroud)
秘密:
$ kubectl create secret tls auth-tls --cert key.pem --key out.key
$ kubectl describe secret auth-tls
Name: auth-tls
Namespace: default
Labels: <none>
Annotations: <none>
Type: kubernetes.io/tls
Data
====
tls.crt: 3231 bytes
tls.key: 1732 …Run Code Online (Sandbox Code Playgroud) 我使用 Helm 和默认配置创建了一个入口控制器
default nginx-ingress-controller LoadBalancer 10.0.182.128 xx.xxx.xx.90 80:32485/TCP,443:31756/TCP 62m
default nginx-ingress-default-backend ClusterIP 10.0.12.39 <none> 80/TCP 62m
Run Code Online (Sandbox Code Playgroud)
使用头盔:
helm install nginx-ingress stable/nginx-ingress \
--set controller.replicaCount=2 \
--set controller.nodeSelector."beta\.kubernetes\.io/os"=linux \
--set defaultBackend.nodeSelector."beta\.kubernetes\.io/os"=linux \
--set controller.service.loadBalancerIP="Created static IP" \
--set controller.service.annotations."service\.beta\.kubernetes\.io/azure-dns-label-name"="XXX-aks-ingress"
Run Code Online (Sandbox Code Playgroud)
该入口正在默认命名空间中运行。
现在,我想添加第二个入口控制器,从官方文档我有特定的入口类
helm install nginx-ingress stable/nginx-ingress \
--namespace ingress-nginx-devices \ #I create this namespace first
--set controller.ingressClass="nginx-devices" \ # custom class to use for different ingress resources
--set controller.replicaCount=2 \
--set controller.nodeSelector."beta\.kubernetes\.io/os"=linux \
--set defaultBackend.nodeSelector."beta\.kubernetes\.io/os"=linux \
--set controller.service.loadBalancerIP="A second static Ip …Run Code Online (Sandbox Code Playgroud) 我有一个kubernetes集群,我使用helm nginx-ingress图表部署了一个nginx入口控制器.
我需要在nginx-controller-pod中生成的nginx.conf文件中添加一些自定义配置,我看到一个问题,如果我添加一行选项,如proxy-buffer-size: "512k"我可以看到这反映在nginx.conf中文件和一切按预期工作.
但是,如果我尝试添加一个片段来完成同样的事情:
location-snippet: |
proxy_buffer_size "512k";
Run Code Online (Sandbox Code Playgroud)
就好像nginx.conf文件忽略了proxy_buffer_size它,并且设置保持默认值.
我需要能够添加http-snippet,server-snippet和location-snippet重写,但我是否尝试将它们添加到ConfigMap或注释中Ingress.yaml文件,他们总是被忽略.
我的Ingress yaml文件:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: my-ingress
annotations:
kubernetes.io/ingress.class: nginx
ingress.kubernetes.io/ssl-redirect: "true"
ingress.kubernetes.io/secure-backends: "true"
ingress.kubernetes.io/force-ssl-redirect: "true"
ingress.kubernetes.io/location-snippet: |
proxy_buffer_size 512k; --This does not update the nginx.conf
spec:
tls:
- hosts:
- my.app.co.uk
secretName: tls-secret
rules:
- host: my.app.co.uk
http:
paths:
- path: /
backend:
serviceName: myappweb-service
servicePort: 80
Run Code Online (Sandbox Code Playgroud)
我的nginx配置图:
apiVersion: v1
kind: ConfigMap
metadata:
labels: …Run Code Online (Sandbox Code Playgroud) 在经典的 Kubernetes Nginx 入口中,我知道可以通过应用此注释基于特定的正则表达式重写目标 url nginx.ingress.kubernetes.io/rewrite-target: /$1
但是此注释在 AWS ALB 入口中不起作用。有谁知道是否可以使用这种入口进行重写工作?
url-rewriting kubernetes kubernetes-ingress amazon-eks aws-application-load-balancer
我有一个通用 SSL 证书 *.domain.com 我想为 4 级域 (my4.level.domain.com) 配置 HTTPS 我在本讨论中读到,我需要使用 --default-ssl-certificate
但我不明白如何使用它
我应该如何更改此配置?
ingress:
enabled: true
annotations: {}
labels: {}
path: /
hosts:
- my4.level.domain.com
extraPaths: []
tls:
- secretName: tls-tierra-ingress
hosts:
- '*.level.domain.com'
- level.domain.com
- my4.level.domain.com
Run Code Online (Sandbox Code Playgroud)
或者我必须运行特殊命令?
我想创建一个自定义的 403 错误页面。目前我已经创建了一个 Ingress 并且在注释中我有这样的东西:
"nginx.ingress.kubernetes.io/whitelist-source-range": "100.01.128.0/20,88.100.01.01"
Run Code Online (Sandbox Code Playgroud)
因此,在该 IP 范围之外访问我的 Web 应用程序的任何尝试都会收到 403 错误。
为了创建自定义页面,我尝试添加以下注释:
"nginx.ingress.kubernetes.io/custom-http-errors": "403",
"nginx.ingress.kubernetes.io/default-backend": "default-http-backend"
Run Code Online (Sandbox Code Playgroud)
其中 default-http-backend 是已部署的应用程序的名称。

入口有这个:
{
"kind": "Ingress",
"apiVersion": "extensions/v1beta1",
"metadata": {
"name": "my-app-ingress",
"namespace": "my-app-test",
"selfLink": "/apis/extensions/v1beta1/namespaces/my-app-test/ingresses/my-app-ingress",
"uid": "8f31f2b4-428d-11ea-b15a-ee0dcf00d5a8",
"resourceVersion": "129105581",
"generation": 3,
"creationTimestamp": "2020-01-29T11:50:34Z",
"annotations": {
"kubernetes.io/ingress.class": "nginx",
"nginx.ingress.kubernetes.io/custom-http-errors": "403",
"nginx.ingress.kubernetes.io/default-backend": "default-http-backend",
"nginx.ingress.kubernetes.io/rewrite-target": "/",
"nginx.ingress.kubernetes.io/whitelist-source-range": "100.01.128.0/20,90.108.01.012"
}
},
"spec": {
"tls": [
{
"hosts": [
"my-app-test.retail-azure.js-devops.co.uk"
],
"secretName": "ssl-secret"
}
],
"rules": [
{
"host": "my-app-test.retail-azure.js-devops.co.uk",
"http": {
"paths": [ …Run Code Online (Sandbox Code Playgroud) 我一直在尝试使用 Terraform 在 AWS 上创建一个具有自我管理节点的 EKS 集群,但我无法让我的 Kubernetes Ingress 创建负载均衡器。没有错误,但没有创建负载均衡器,它只是超时。
我确实首先在我的帐户中手动创建了一个负载均衡器,并验证了负载均衡器角色是否存在。AWSElasticLoadBalancingServiceRolePolicy当我的 Terraform 代码运行时访问该策略。
我非常依赖本教程
变量:
aws_region = "ap-southeast-1"
domain = "*.mydomain.com"
cluster_name = "my-tf-eks-cluster"
vpc_id = "vpc-0d7700e26db6b3e21"
app_subnet_ids = "subnet-03c1e8c57110c92e0, subnet-0413e8bf24cb32595, subnet-047dcce0b810f0fbd"
// gateway subnet IDs
Run Code Online (Sandbox Code Playgroud)
地形代码:
terraform {
}
provider "aws" {
region = var.aws_region
version = "~> 2.8"
}
data "aws_acm_certificate" "default" {
domain = var.domain
statuses = ["ISSUED"]
}
resource "kubernetes_service_account" "alb-ingress" {
metadata {
name = "alb-ingress-controller"
namespace = "kube-system"
labels = { …Run Code Online (Sandbox Code Playgroud) amazon-web-services kubernetes terraform kubernetes-ingress amazon-eks
当我尝试使用公共IP访问时收到错误消息:
"{"message":"failure to get a peer from the ring-balancer"}"
Run Code Online (Sandbox Code Playgroud)
看来Kong无法提供上游服务。
我正在使用投票应用程序
入口.yaml
"{"message":"failure to get a peer from the ring-balancer"}"
Run Code Online (Sandbox Code Playgroud)
服务.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: telehealth-ingress
namespace: kong
annotations:
kubernetes.io/ingress.class: "kong"
spec:
rules:
- http:
paths:
- backend:
serviceName: voting-service
servicePort: 80
Run Code Online (Sandbox Code Playgroud)
部署.yaml
apiVersion: v1
kind: Service
metadata:
name: voting-service
labels:
name: voting-service
app: voting-app
spec:
ports:
- targetPort: 80
port: 80
selector:
name: voting-app-pod
app: voting-app
Run Code Online (Sandbox Code Playgroud) kubernetes ×9
nginx ×4
amazon-eks ×2
aws-application-load-balancer ×1
azure-aks ×1
kong ×1
kong-ingress ×1
proxy ×1
terraform ×1
yaml ×1