Kubernetes Pod 静态 IP 地址

问题描述 投票:0回答:1

我在 Azure 中使用 AKS,并在 AKS 中节点的 Pod 中应用了 nginx 服务器,我希望能够调用此 pod IP 地址来获取 Web 内容。 问题是,每次部署 AKS 和其中的 Pod 后,Pod 的 IP 地址都会发生变化。每次我需要找出 IP 地址并调用它。这不利于自动化。

如何为 Pod 设置静态 IP 地址,以便我可以调用它并获得响应? 如果我无法设置静态IP地址,我该如何解决这个问题?

我希望获得一个 IP 地址来调用它并获取 Web 内容。

azure kubernetes azure-aks
1个回答
0
投票

David 建议使用 Service 而不是直接 Pod 连接,这确实是推荐的方法。如果您需要对这些服务进行外部访问,则适当利用 NodePort、LoadBalancer 或 Ingress 资源将提供受控且可靠的访问。

避免直接连接到 Pod

为什么?

Kubernetes 中的 Pod 是短暂的,这意味着它们可以在扩展操作或节点维护期间随时重新启动、重新安排或删除。每次重新启动或重新安排 Pod 时,它都可能会收到一个新的 IP 地址。

为什么使用服务?

Kubernetes 中的服务提供一致的 IP 地址和 DNS 名称,无论后端 Pod 发生什么变化,这些 IP 地址和 DNS 名称都保持稳定。这种抽象允许应用程序保持一致的访问点。

因此,为了解决您需要一致的 IP 地址来访问 AKS 上托管的 Nginx 服务器的场景,您将使用 Kubernetes 服务,还可能使用 Ingress(如果您需要从集群外部进行访问)。

示例- 首先,您需要一个运行 Nginx 服务器的部署。

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

要为 Nginx 服务器创建稳定的端点,请定义一个针对 Nginx Pod 的服务。该服务将在集群内提供稳定的内部 IP 地址,并在 Nginx Pod 之间提供负载平衡请求。

apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
  type: ClusterIP

如果需要从 AKS 集群外部访问 Nginx 服务器,可以使用 LoadBalancer 服务。在这种情况下,如下修改服务定义。基本上只需将类型更改为

Loadbalancer

apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
  type: LoadBalancer

并相应地使用

kubectl apply -f <filename.yaml>

保存所有这些文件

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.