Nginx入口无法服务

时间:2019-06-29 07:05:50

标签: kubernetes kubectl kubernetes-ingress kubeadm nginx-ingress

我是k8s的新手 我的部署文件低于

apiVersion: apps/v1
kind: Deployment
metadata:
  name: jenkins-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      component: web
  template:
    metadata:
      labels:
        component: web
    spec:
      containers:
        - name: jenkins
          image: jenkins
          ports:
            - containerPort: 8080
            - containerPort: 50000

我的服务文件如下:

apiVersion: v1
kind: Service
metadata:
   name: jenkins-svc
spec:
   type: ClusterIP
   ports:
   - port: 80
     targetPort: 8080
     name: http
   selector:
      component: web

我的入口文件是

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: jenkins-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: jenkins.xyz.com
    http:
      paths:
      - path: /
        backend:
          serviceName: jenkins-svc
          servicePort: 80


我正在使用nginx入口项目,并且我的集群是使用具有3个节点的kubeadm创建的 nginx ingress

我首先运行了强制性命令

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/mandatory.yaml

当我尝试打jenkins.xyz.com时,它不起作用 当我尝试命令

  kubectl get ing

ing资源没有获得分配给它的IP地址

2 个答案:

答案 0 :(得分:1)

入口资源不过是反向代理(Ingress controller)的配置。

Ingress没有分配IP地址是正常的。

您需要做的是连接到入口控制器实例。

为此,您需要了解它们如何在群集中公开。

考虑到您声称用来运行入口控制器的YAML,没有迹象表明会暴露给外部网络。

您至少需要定义一个Service来公开您的控制器(如果放置群集的提供程序支持它,则可以成为负载平衡器),您可以使用HostNetwork: true或{{1 }}。

要使用最新选项(NodePort),可以应用以下YAML:

https://github.com/kubernetes/ingress-nginx/blob/master/deploy/static/provider/baremetal/service-nodeport.yaml

我建议您阅读Ingress文档页面,以更清楚地了解所有这些工作原理。

https://kubernetes.io/docs/concepts/services-networking/ingress/

答案 1 :(得分:0)

访问您的本地Kubernetes集群POD ,需要创建一个NodePortNodePort将使用其公用IP和端口在每个节点上发布您的服务。然后,您可以使用任何群集IP和分配的端口访问该服务。

在Kubernetes中定义NodePort

Kubernetes NodePort and proxy

apiVersion: v1
kind: Service
metadata:
  name: nginx-service-np
  labels:
    name: nginx-service-np
spec:
  type: NodePort
  ports:
    - port: 8082        # Cluster IP, i.e. http://10.103.75.9:8082
      targetPort: 8080  # Application port
      nodePort: 30000   # (EXTERNAL-IP VirtualBox IPs) i.e. http://192.168.50.11:30000/ http://192.168.50.12:30000/ http://192.168.50.13:30000/
      protocol: TCP
      name: http
  selector:
    app: nginx 

Building a Kubernetes Cluster with Vagrant and Ansible (without Minikube)上查看带有源代码的完整示例。

如果您想从以下方面的服务网格体系结构中受益,也可以用 Istio 替换nginx入口控制器:

  • 负载均衡流量,外部或内部
  • 控制失败,重试,路由
  • 应用限制并监视服务之间的网络流量
  • 安全通信

请参见Installing Istio in Kubernetes under VirtualBox (without Minikube)