【发布时间】:2019-11-18 21:01:21
【问题描述】:
需要使用 Ingress hostname/sub-domain 从外部访问应用程序,用于以下代码中指定的应用程序。 例如 test-app.dev-cluster-poc.company.domain。
cat app-ingress.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
namespace: ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
name: app-ingress
spec:
rules:
- host: test-app.dev-cluster-poc.company.domain
http:
paths:
- backend:
serviceName: appsvc1
servicePort: 80
path: /app1
- backend:
serviceName: appsvc2
servicePort: 80
path: /app2
在使用url 中的步骤进行故障排除时,我发现“kubectl get ingress”输出中没有 ADDRESS。期待一个像下面这样的 IP 地址。
外部访问应用程序需要哪些必要的配置,例如注册主机名(test-app.dev-cluster-poc.company.domain)或添加 A-record 或在 kubernetes 集群中运行任何 dns 服务。
是什么导致“kubectl get ingress”命令中的 ADDRESS 列为空。
[编辑]
apiVersion: v1
kind: Service
metadata:
name: appsvc1
namespace: ingress
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
app: app1
如下所示的 Nginx 控制器服务。
cat nginx-ingress-controller-service.yaml
apiVersion: v1
kind: Service
metadata:
name: nginx-ingress
namespace: ingress
spec:
type: NodePort
ports:
- port: 80
nodePort: 30000
name: http
- port: 18080
nodePort: 32000
name: http-mgmt
selector:
app: nginx-ingress-lb
【问题讨论】:
-
您的集群在哪里运行?答案因云提供商而异
-
@paltaa - 它在 VMware pks 中运行。我可以添加 dns 名称,但想知道需要什么其他配置才能使这项工作从端到端。另外,为什么我的入口没有地址,有什么线索吗?
-
我认为这取决于您的服务
appsvc1和appsvc2定义为哪种serviceType。如果它们被定义为LoadBalancer并且您的提供商可以提供额外的 IP 地址,则地址字段应填充该 IP(即每个入口都有一个唯一的 IP)。如果它们被定义为ClusterIP或NodePort,ADDRESS字段将为空并且将使用 kube 代理 IP。虽然我可能是错的...... -
正如社区 id 所提到的取决于云提供商的实施,您提到您正在使用 VMware pks,也许应该在集群创建期间配置负载均衡器 Load Balancers in PKS Kubernetes and VMware Enterprise PKS Networking。您可以使用命令
kubectl describe ingress ..从入口资源kubectl get svc中查看更多信息,输入Loadbalanacer -
您的服务需要是 LoadBalancer 或 NodePort 类型,否则,它们无法从集群外部访问,因此无法进行路由。尝试将其更改为 LoadBalancer。
标签: kubernetes kubernetes-ingress nginx-ingress kube-dns