我正在努力应对允许从两个不同路径访问到部署在不同名称空间上的服务的入口配置。
1#入口:
# Source: deployment/templates/ingress.yaml
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: portal-api
labels:
helm.sh/chart: deployment-0.1.0
app.kubernetes.io/name: deployment
app.kubernetes.io/instance: portal-api
app.kubernetes.io/version: "0.0.1"
app.kubernetes.io/managed-by: Helm
annotations:
certmanager.k8s.io/acme-challenge-type: http01
certmanager.k8s.io/cluster-issuer: letsencrypt-prod
kuberentes.io/tls-acme: "true"
kubernetes.io/ingress.class: nginx
spec:
tls:
- hosts:
- "example.com"
secretName: portal-certificate
rules:
- host: "example.com"
http:
paths:
- path: /api/rest/(.*)
backend:
serviceName: portal-api
servicePort: 80
# Source: deployment/templates/ingress.yaml
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: portal-ui
labels:
helm.sh/chart: deployment-0.1.0
app.kubernetes.io/name: deployment
app.kubernetes.io/instance: portal-ui
app.kubernetes.io/version: "0.0.1"
app.kubernetes.io/managed-by: Helm
annotations:
certmanager.k8s.io/acme-challenge-type: http01
certmanager.k8s.io/cluster-issuer: letsencrypt-prod
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
tls:
- hosts:
- "example.com"
secretName: portal-certificate
rules:
- host: "example.com"
http:
paths:
- path: /(.*)
backend:
serviceName: portal-ui
servicePort: 80
为路径example.com路由-有效,将其重定向到portal-ui。 路径路由example.com/api/rest/(某物)-不起作用,它重定向到Portal-ui服务。
我认为它将在相同的名称空间上工作...但是我需要为每个服务使用两个名称空间。
答案 0 :(得分:3)
@Arghya Sadhu提到
Ingress及其对应的服务必须位于同一名称空间中,否则Ingress无法从服务中发现端点。
自2015年以来开设了github issue,并且仍在讨论如何使其运作。
目前,可以在同一名称空间中创建入口
由github发行成员@aledbf制作的示例
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: component1
namespace: component1
spec:
rules:
- host: domain.com
http:
paths:
- backend:
serviceName: component1
servicePort: 80
path: /component1
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: component2
namespace: component2
spec:
rules:
- host: domain.com
http:
paths:
- backend:
serviceName: component2
servicePort: 80
path: /component2
OR
您可以尝试由github问题成员@chestack制作的workaround
我的解决方法:
namespaceA中的serviceA
在namespaceB中创建serviceB
spec:
...
type: ExtertalName
externalName: serviceA.namespaceA.svc.cluster.local
将入口规则添加到命名空间B中的ingressB
- path: /****
backend:
serviceName: serviceB
servicePort: ***
答案 1 :(得分:1)
Ingress及其对应的服务必须位于同一名称空间中,否则Ingress无法从服务中发现端点。因此,在名称空间1中创建ingress1,service1,在名称空间2中创建ingress2,service2。