【发布时间】:2020-08-26 14:05:29
【问题描述】:
如果我的术语不完美,请提前抱歉,我现在正在学习 Kubernetes。
我在一系列 AWS 实例上拥有一个自我管理的 Kubernetes 集群,其中包含一个主节点和五个工作节点。所有节点都运行 Ubuntu 18.04。这些节点都在 VPC 上,我使用堡垒主机 ssh 进入它们。目前,我还为所有节点提供了外部 IP,只是为了使测试更容易。我也有一个域,我们叫它xxx.example.org,指向主节点当前的外部IP。
我使用 Kubespray 设置 Kubernetes,然后继续安装 Istio(使用 istioctl)并根据官方文档 here 和 here 设置 Ingress 网关
当我运行 kubectl get svc -n istio-system istio-ingressgateway 时,集群的外部 IP 始终是:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
istio-ingressgateway LoadBalancer 10.233.3.209 <pending> 15020:30051/TCP,80:32231/TCP,443:30399/TCP,15029:31406/TCP,15030:32078/TCP,15031:30050/TCP,15032:30204/TCP,31400:31912/TCP,15443:31071/TCP 3m1s
我可以在浏览器中使用IP:32231/headers 或xxx.example.org:32231/headers 访问服务
我使用以下命令为 Istio 文档中引用的 httpbin 和 Bookinfo 项目配置了网关和 VirtualService:
kubectl apply -f - <<EOF
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: httpbin-gateway
spec:
selector:
istio: ingressgateway # use Istio default gateway implementation
servers:
- port:
number: 80
name: http
protocol: HTTP
hosts:
- "*"
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: httpbin
spec:
hosts:
- "*"
gateways:
- httpbin-gateway
http:
- match:
- uri:
prefix: /status
- uri:
prefix: /delay
- uri:
prefix: /headers
route:
- destination:
port:
number: 8000
host: httpbin
- match:
- uri:
exact: /productpage
- uri:
prefix: /static
- uri:
exact: /login
- uri:
exact: /logout
- uri:
prefix: /api/v1/products
route:
- destination:
host: productpage
port:
number: 9080
EOF
鉴于这是一个自我管理的集群,有没有办法为集群获取外部 IP?如果没有,我将如何修改我当前的配置,以便可以从xxx.example.org 而不是xxx.example.org:32231 访问这些页面?
编辑#1
我确实尝试按照 this documentation 和 this guide 在 AWS 上设置 NLB。不幸的是,这并没有改变任何东西,EXTERNAL-IP 仍然是<pending>。之后,我部署了一个新的入口网关,如下所示:
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/aws-load-balancer-type: "nlb"
labels:
app: istio-ingressgateway-2
istio: ingressgateway-2
operator.istio.io/component: IngressGateways
operator.istio.io/managed: Reconcile
operator.istio.io/version: 1.5.2
release: istio
name: istio-ingressgateway-2
namespace: istio-system
spec:
ports:
- name: status-port
nodePort: 30625
port: 15020
protocol: TCP
targetPort: 15020
- name: http2
nodePort: 32491
port: 80
protocol: TCP
targetPort: 80
- name: https
nodePort: 30466
port: 443
protocol: TCP
targetPort: 443
- name: kiali
nodePort: 32034
port: 15029
protocol: TCP
targetPort: 15029
- name: prometheus
nodePort: 30463
port: 15030
protocol: TCP
targetPort: 15030
- name: grafana
nodePort: 31176
port: 15031
protocol: TCP
targetPort: 15031
- name: tracing
nodePort: 32040
port: 15032
protocol: TCP
targetPort: 15032
- name: tcp
nodePort: 32412
port: 31400
protocol: TCP
targetPort: 31400
- name: tls
nodePort: 30411
port: 15443
protocol: TCP
targetPort: 15443
selector:
app: istio-ingressgateway-2
istio: ingressgateway-2
type: LoadBalancer
我还将我的httpbin-gateway 更改为使用ingressgateway-2。这无法加载任何内容,即使在端口 32231 上也是如此。
【问题讨论】:
标签: amazon-web-services networking kubernetes istio