首页 > 解决方案 > 使用入口资源中的主机名/子域从外部访问应用程序

问题描述

需要使用以下代码中指定的应用程序的Ingress主机名/子域从外部访问应用程序。例如。test-app.dev-cluster-poc.company.domain。

猫应用程序入口.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地址。

在此处输入图像描述

但是,我看到如下所示,第 3 列是空的。 在此处输入图像描述

外部访问应用程序所需的必要配置是什么,例如注册主机名(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

标签: kuberneteskubernetes-ingressnginx-ingresskube-dns

解决方案


1.你可以部署一个入口部署

2.通过端口 80 公开你的入口部署

kubectl expose deploy your-deployment-name --port 80

资源

3.您可以在部署中添加ingressClassName

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: nginx-ingress
  namespace: ingress
spec:
  ingressClassName: nginx

入口配置示例


推荐阅读