我正在Kubernetes上部署许多微服务和Angular前端的Docker容器。 我已经使用ingress控制器暴露了这些服务,使用ingress指定每个服务,并在后端指定了路径。
apiVersion: extensions/v1beta1
kind: Ingress
对于前端,我已经创建了一个类型为loadbalancer的服务。
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/azure-load-balancer-resource-group: my-resource-group
name: myapp-svc
namespace: ui
spec:
loadBalancerIP: SOME_IP_ADDRESS
type: LoadBalancer
ports:
- port: 80
selector:
app: myapp
这样是可以,但是现在我有两个IP地址,一个用于UI负载平衡器,另一个用于ingress(用于API)。
我可以仅使用一个IP地址吗?
如何在不创建外部loadbalancer的情况下使用ingress本身来暴露UI?
试试这个
apiVersion: extensions/v1beta1 kind: Ingress metadata: annotations: kubernetes.io/ingress.class: nginx nginx.ingress.kubernetes.io/rewrite-target: /$1 nginx.ingress.kubernetes.io/service-upstream: "true" name: rule-name namespace: default spec: rules: - host: hostname http: paths: - backend: serviceName: frontend-service servicePort: port-number path: /(.*) - backend: serviceName: backend-service servicePort: port-number path: /api/(.*)
可以使用上面定义的策略,在其中可以直接将frontend映射到
/
,并使用rewrite-target将hostname/api
之类的内容映射到后端服务。你只能将前端和后端服务保持在clusterIP级别
确实只有这种方式。感谢
你的答案