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隧道,但是失败了。