Я запускаю кластер kubernetes в облаке openstack, и у меня есть поды для моего внешнего интерфейса angular и моего внутреннего интерфейса phoenix / elixir. Когда пользователь впервые вызывает интерфейс через входящий открытый сервер узла, http-вызовы серверной части выполняются на уровне обслуживания внутри кластера kubernetes и отправляются пользователю. Однако, как только пользователь переходит в среду angular 8, HTTP-вызовы направляются непосредственно на тот же URL-адрес, который использовались службами Kubernetes для связи, что не позволяет разрешить адрес. Итак, абсолютно ли необходимо предоставлять конечную точку backend 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-вызовов, служба аутентификации делает это для входа в систему:
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
);
}