我在 openstack 云上运行 kubernetes 集群,我的 angular 前端和 phoenix/elixir 后端各有一个 pod。当用户首次通过暴露 ingress 的节点服务器调用前端时,对后端的 http 调用将在 kubernetes 集群内的服务级别执行并发送给用户。但是,一旦用户在 angular 8 环境中导航,http 调用就会直接转到 kubernetes 服务用于通信的相同 url,因此无法解析地址。那么,为了让用户能够浏览网站,是否绝对有必要将后端 api 端点暴露给互联网?或者有没有办法通过前端入口接入点传输所有内容?
根据要求:
ingress.yaml 是:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: ingress
annotations:
kubernetes.io/ingress.class: "nginx"
spec:
rules:
- host:
http:
paths:
- path: /api
backend:
serviceName: webapp
servicePort: 8000
- path: /
backend:
serviceName: frontend
servicePort: 8200
关于 http 调用,auth 服务执行以下操作来登录:
login({ email, password }): Observable<User> {
const params = {
data: { attributes: { email: email, password: password } }
};
return this.http.post<{ data: User }>('login', params).pipe(
map(({ data: user }) => {
this.setTokenInLocalStorage(user, 'user');
this.store.dispatch(
this.actions.getCurrentUserSuccess(
JSON.parse(localStorage.getItem('user'))
)
);
this.store.dispatch(this.actions.loginSuccess());
return user;
}),
tap(
_ => this.router.navigate(['/']),
error => this.toastrService.error(error.error.errors.detail, 'ERROR!')
),
catchError(error => {
return of(error);
}) as any
);
}