Istio + minikube + Nginx(反应)。无法从浏览器或 CURL 获取访问权限
Istio + minikube + Nginx (React). Cannot get access from browser nor CURL
当我在没有入口网关的情况下进行部署时,我可以通过端口转发直接访问浏览器中应用程序的 LoadBalancer。但是通过入口网关它不起作用。
Sidecars 注入已启用!
Istio v1.4.0
Minukube v1.5.2
Kubernetes v1.16.0
Istio 安装:
istioctl manifest apply \
--set values.global.mtls.enabled=false \
--set values.tracing.enabled=true \
--set values.kiali.enabled=true \
--set values.grafana.enabled=true \
--namespace istio-system
比使用 NGINX 部署 React。
# Frontend service
apiVersion: v1
kind: Service
metadata:
name: front-web
namespace: demo
spec:
type: NodePort
selector:
app: front-web
ports:
- name: http
port: 80
---
# Frontend app
apiVersion: apps/v1
kind: Deployment
metadata:
name: front-web
namespace: demo
labels:
app: front-web
spec:
replicas: 1
selector:
matchLabels:
app: front-web
template:
metadata:
labels:
app: front-web
spec:
containers:
- name: front-web
image: sergeygreat/front-web:v1.0.3
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
网关
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: demo-gw
namespace: demo
spec:
selector:
istio: ingressgateway
servers:
- port:
number: 80
name: http
protocol: HTTP
hosts:
- "*"
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: demo-vs
namespace: demo
spec:
hosts:
- "*"
gateways:
- demo-gw
http:
- match:
- uri:
exact: /
route:
- destination:
port:
number: 80
host: front-web.default.svc.cluster.local # <- tryed just `front-web`, no luck
>> kubectl get svc -n istio-system
istio-ingressgateway LoadBalancer 10.104.158.110 <pending> 80:31332/TCP,...
一切都是 运行 但无法通过 http://minikube ip:31332 访问 ???
对于浏览器中的 80 端口:http://minikube_ip - 404 Not Found openresty/1.15.8.2
对于浏览器中的端口 31332:http://minikube_ip:31332 - 503 错误
minikube ssh
$ curl -i http://localhost:31332
HTTP/1.1 503 Service Unavailable
date: Mon, 16 Dec 2019 16:04:32 GMT
server: istio-envoy
content-length: 0
$ curl -i http://192.168.99.101:31332
HTTP/1.1 503 Service Unavailable
date: Mon, 16 Dec 2019 16:04:45 GMT
server: istio-envoy
content-length: 0
可以请人帮忙吗?
如果你使用 nginx ingress 下面是步骤。我假设有类似的方法来启用 istio ingress
minikube addons enable ingress
通过验证以下命令的输出
,检查您的入口控制器是否 运行
kubectl get pods -n kube-system
nginx-ingress-controller-5984b97644-rnkrg 1/1 Running 0 1m
将服务公开为节点端口。下面是示例命令
kubectl expose deployment web --target-port=8080 --type=NodePort
kubectl get service web
web NodePort 10.104.133.249 <none> 8080:31637/TCP 12m
然后获取 minikube url
minikube service web --url
http://172.17.0.15:31637
尝试重新创建 minikube:
>>minikube stop
>>minikube delete
>>minikube start --memory=16384 --cpus=4 --vm-driver=virtualbox --kubernetes-version=v1.16.0
如果没有帮助尝试绑定到另一个端口:
- Deployment set to 80
- Service type should be NodePort and bind it to port 8080 targetPort:80
- VirtualService host "*" port 8080
应该有用!
如果没有,请尝试从 VirtualService 中删除此部分:
- match:
- uri:
exact: /
设置入口后,运行 minikube 服务。这将通过 minikube 为 HTTP2 识别的节点端口启动流量。
最后,您可以通过 minikube 识别的 minikubeIP:<nodeport>
访问您的应用程序。我很挣扎!官方文档说使用minikube隧道,但是失败了。
当我在没有入口网关的情况下进行部署时,我可以通过端口转发直接访问浏览器中应用程序的 LoadBalancer。但是通过入口网关它不起作用。 Sidecars 注入已启用!
Istio v1.4.0
Minukube v1.5.2
Kubernetes v1.16.0
Istio 安装:
istioctl manifest apply \
--set values.global.mtls.enabled=false \
--set values.tracing.enabled=true \
--set values.kiali.enabled=true \
--set values.grafana.enabled=true \
--namespace istio-system
比使用 NGINX 部署 React。
# Frontend service
apiVersion: v1
kind: Service
metadata:
name: front-web
namespace: demo
spec:
type: NodePort
selector:
app: front-web
ports:
- name: http
port: 80
---
# Frontend app
apiVersion: apps/v1
kind: Deployment
metadata:
name: front-web
namespace: demo
labels:
app: front-web
spec:
replicas: 1
selector:
matchLabels:
app: front-web
template:
metadata:
labels:
app: front-web
spec:
containers:
- name: front-web
image: sergeygreat/front-web:v1.0.3
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
网关
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: demo-gw
namespace: demo
spec:
selector:
istio: ingressgateway
servers:
- port:
number: 80
name: http
protocol: HTTP
hosts:
- "*"
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: demo-vs
namespace: demo
spec:
hosts:
- "*"
gateways:
- demo-gw
http:
- match:
- uri:
exact: /
route:
- destination:
port:
number: 80
host: front-web.default.svc.cluster.local # <- tryed just `front-web`, no luck
>> kubectl get svc -n istio-system
istio-ingressgateway LoadBalancer 10.104.158.110 <pending> 80:31332/TCP,...
一切都是 运行 但无法通过 http://minikube ip:31332 访问 ???
对于浏览器中的 80 端口:http://minikube_ip - 404 Not Found openresty/1.15.8.2
对于浏览器中的端口 31332:http://minikube_ip:31332 - 503 错误
minikube ssh
$ curl -i http://localhost:31332
HTTP/1.1 503 Service Unavailable
date: Mon, 16 Dec 2019 16:04:32 GMT
server: istio-envoy
content-length: 0
$ curl -i http://192.168.99.101:31332
HTTP/1.1 503 Service Unavailable
date: Mon, 16 Dec 2019 16:04:45 GMT
server: istio-envoy
content-length: 0
可以请人帮忙吗?
如果你使用 nginx ingress 下面是步骤。我假设有类似的方法来启用 istio ingress
minikube addons enable ingress
通过验证以下命令的输出
,检查您的入口控制器是否 运行kubectl get pods -n kube-system
nginx-ingress-controller-5984b97644-rnkrg 1/1 Running 0 1m
将服务公开为节点端口。下面是示例命令
kubectl expose deployment web --target-port=8080 --type=NodePort
kubectl get service web
web NodePort 10.104.133.249 <none> 8080:31637/TCP 12m
然后获取 minikube url
minikube service web --url
http://172.17.0.15:31637
尝试重新创建 minikube:
>>minikube stop
>>minikube delete
>>minikube start --memory=16384 --cpus=4 --vm-driver=virtualbox --kubernetes-version=v1.16.0
如果没有帮助尝试绑定到另一个端口:
- Deployment set to 80
- Service type should be NodePort and bind it to port 8080 targetPort:80
- VirtualService host "*" port 8080
应该有用!
如果没有,请尝试从 VirtualService 中删除此部分:
- match:
- uri:
exact: /
设置入口后,运行 minikube 服务。这将通过 minikube 为 HTTP2 识别的节点端口启动流量。
最后,您可以通过 minikube 识别的 minikubeIP:<nodeport>
访问您的应用程序。我很挣扎!官方文档说使用minikube隧道,但是失败了。