我是kubernetes的新手。我花了最后一周学习有关节点,荚,群集,服务和部署的知识。
因此,我试图对kubernetes的网络如何工作有更多的了解。我只想公开一个简单的nginx docker网页并从我的浏览器中将其选中。
我们的VPC设置有直接连接,因此我能够在其私有(private)IP地址上访问EC2实例。我现在还使用aws上的UI将EKt集群设置为private。出于测试目的,我将cidr范围添加为EKS群集UI中的附加安全组,以允许在所有TCP上使用。
这是我的基本服务和部署定义:

apiVersion: v1
kind: Service
metadata:
  name: testing-nodeport
  namespace: default
  labels:
    infrastructure: fargate
    app: testing-app
spec:
  type: NodePort
  selector:
    app: testing-app
  ports:
    - port: 80
      targetPort: testing-port
      protocol: TCP
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: testing-deployment
  namespace: default
  labels:
    infrastructure: fargate
    app: testing-app
spec:
  replicas: 1
  selector:
    matchLabels:
      infrastructure: fargate
      app: testing-app
  template:
    metadata:
      labels:
        infrastructure: fargate
        app: testing-app
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - name: testing-port
          containerPort: 80
运行时,我可以看到一切运行正常:kubectl get all -n default但是,当我尝试在80端口上命中NodePort IP地址时,无法从浏览器加载它。
如果我首先在以下URL上设置kubectl proxy(因为代理是在8001端口上启动的),则可以点击pod:
http://localhost:8001/api/v1/namespaces/default/services/testing-nodeport:80/proxy/
此时我几乎迷路了。我不知道我在做什么错,为什么我不能在kubectl proxy命令之外点击基本的Nginx docker 。

最佳答案

想象一下,kubernetes集群就像您的AWS VPC。它具有自己的带有专用IP的内部网络,并连接所有POD。 Kubernetes仅公开您明确要求公开的内容。
服务端口80在群集内可用。因此,一个Pod可以使用service name:service port与该服务对话。但是,如果需要从外部访问,则需要ingress controller / LoadBalancer。您也可以使用NodePort进行测试。节点端口将大于30000(在30000-32767之内)。
您应该能够使用node IP:nodeport访问nginx。在这里,我假设您有打开节点端口的安全组。

使用此Yaml。我将节点端口更新为31000。可以在nodeport:31000上访问nginx。如前所述,您不能在集群中使用80。如果需要使用80,则需要入口 Controller 。

apiVersion: v1
kind: Service
metadata:
  name: testing-nodeport
  namespace: default
  labels:
    infrastructure: fargate
    app: testing-app
spec:
  type: NodePort
  selector:
    app: testing-app
  ports:
    - port: 80
      targetPort: testing-port
      protocol: TCP
      nodePort: 31000
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: testing-deployment
  namespace: default
  labels:
    infrastructure: fargate
    app: testing-app
spec:
  replicas: 1
  selector:
    matchLabels:
      infrastructure: fargate
      app: testing-app
  template:
    metadata:
      labels:
        infrastructure: fargate
        app: testing-app
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - name: testing-port
          containerPort: 80

关于amazon-web-services - AWS EKS,如何直接从浏览器命中Pod?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/63162773/

10-15 22:20