【问题标题】:How to expose nginx on public Ip using NodePort service in Kubernetes?如何在 Kubernetes 中使用 NodePort 服务在公共 IP 上公开 nginx?
【发布时间】:2018-07-29 03:39:37
【问题描述】:

我正在执行kubectl create -f nginx.yaml,它成功创建了 pod。但是我的实例的公共 IP 上没有暴露 PODS。以下是我使用的 YAML,服务类型为 nodeport:

 apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:
        - containerPort: 80

---
apiVersion: v1
kind: Service
metadata:
  name: nginx
  labels:
    name: nginx
spec:
  type: NodePort
  ports:
    - port: 80
      nodePort: 30080
      name: http
    - port: 443
      nodePort: 30443
      name: https
  selector:
    name: nginx

在我的方法中或在 YAML 文件上方以将部署时的 pod 暴露给公共 IP 时可能有什么不正确的地方?

PS:防火墙和 ACL 在所有 TCP 上对 Internet 开放

【问题讨论】:

    标签: kubernetes containers kubectl


    【解决方案1】:

    Jeel 是对的。您的服务选择器与 Pod 标签不匹配。

    如果你像 Jeel 在这个答案中添加的那样修复它

    apiVersion: v1
    kind: Service
    metadata:
      name: nginx
      labels:
        name: nginx
    spec:
      type: NodePort
      ports:
        - port: 80
          nodePort: 30080
          name: http
      selector:
        name: nginx
    

    您的服务将在节点 IP 地址中公开。因为你的服务类型是 NodePort。

    如果您的节点 IP 是 35.226.16.207,您可以使用此 IP 和 NodePort 连接到您的 Pod

    $ curl 35.226.16.207:30080
    

    在这种情况下,您的节点必须有一个公共 IP。否则无法访问

    第二个选项,可以创建LoadBalancer Type Service

    apiVersion: v1
    kind: Service
    metadata:
      name: nginx
      labels:
        name: nginx
    spec:
      type: LoadBalancer
      ports:
        - port: 80
          name: http
      selector:
        name: nginx
    

    这将为您提供一个公共 IP。

    更多详情,check this

    【讨论】:

      【解决方案2】:

      没有添加端点。在调试时,我发现部署和服务之间的标签不匹配。因此,将标签类型从“app”更改为“name”并且它起作用了。

      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: nginx-deployment
        labels:
          name: nginx
      spec:
        replicas: 3
        selector:
          matchLabels:
            name: nginx
        template:
          metadata:
            labels:
              name: nginx
          spec:
            containers:
            - name: nginx
              image: nginx:1.7.9
              ports:
              - containerPort: 80
      
      ---
      apiVersion: v1
      kind: Service
      metadata:
        name: nginx
        labels:
          name: nginx
      spec:
        type: NodePort
        ports:
          - port: 80
            nodePort: 30080
            name: http
        selector:
          name: nginx
      

      【讨论】:

      • 是的,那一定在最上面谢谢
      猜你喜欢
      • 1970-01-01
      • 2018-09-11
      • 1970-01-01
      • 2021-07-25
      • 1970-01-01
      • 1970-01-01
      • 2018-12-19
      • 1970-01-01
      • 2023-02-01
      相关资源
      最近更新 更多