gpt4 book ai didi

kubernetes - 谷歌 Kubernetes 引擎 : How to define one Ingress for multiple namespaces?

转载 作者:行者123 更新时间:2023-12-02 11:28:54 25 4
gpt4 key购买 nike

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

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

GKE 要求入口的目标服务类型为 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: prod-service # This service lives in 'dev' namespace and is of type ExternalName. Its final purpose is to point to the real target service living in 'prod' namespace.
servicePort: http

- host: www.domain.com
http:
paths:
- path: /*
backend:
serviceName: prod-service
servicePort: http

由于 GKE 要求服务为 NodePort我被困在 prod-service .

任何帮助将不胜感激。

非常感谢

最佳答案

好的,这就是我一直在做的。我只有一个入口和一个后端服务到 nginx。

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: ingress
spec:
backend:
serviceName: nginx-svc
servicePort: 80

在您的 nginx 部署/ Controller 中,您可以使用典型的 nginx 配置定义配置映射。通过这种方式,您可以使用一个入口并定位多个命名空间。
apiVersion: v1
kind: ConfigMap
metadata:
name: nginx-config
data:
default.conf: |
server {
listen 80;
listen [::]:80;
server_name _;

location /{
add_header Content-Type text/plain;
return 200 "OK.";
}

location /segmentation {
proxy_pass http://myservice.mynamespace.svc.cluster.local:80;
}
}

并且部署将通过 config-map 使用 nginx 的上述配置
apiVersion: extensions/v1
kind: Deployment
metadata:
labels:
app: nginx
name: nginx
spec:
replicas: 2
template:
metadata:
labels:
app: nginx
spec:
#podAntiAffinity will not let two nginx pods to run in a same node machine
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- nginx
topologyKey: kubernetes.io/hostname
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
volumeMounts:
- name: nginx-configs
mountPath: /etc/nginx/conf.d
livenessProbe:
httpGet:
path: /
port: 80
# Load the configuration files for nginx
volumes:
- name: nginx-configs
configMap:
name: nginx-config

---

apiVersion: v1
kind: Service
metadata:
name: nginx-svc
spec:
selector:
app: nginx
type: NodePort
ports:
- protocol: "TCP"
nodePort: 32111
port: 80

通过这种方式,您可以利用由 google 或 cert-manager 管理的 tls/ssl 终止等入口功能,并且如果您愿意,您也可以在 nginx 中进行复杂的配置。

关于kubernetes - 谷歌 Kubernetes 引擎 : How to define one Ingress for multiple namespaces?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58739513/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com