无法通过外网访问kubernetes服务

Cannot access kubernetes service via outside network

我使用 kubernetes 1.3.0 设置 kubernetes 环境,运行在同一主机上设置主节点和节点,我 运行 一个 tomcat Web 应用程序,一个 RC,一个服务docker,似乎 运行ning 没问题,我可以通过 curl 命令通过内部网络访问服务,但是当我尝试使用 public IP 从互联网访问服务时,失败了。

RC 配置为:

apiVersion: v1
kind: ReplicationController
metadata:
  name: myweb
spec:
    replicas: 2
    selector:
      app: myweb
    template:
      metadata:
        labels:
          app: myweb
      spec:
        containers:
        - name: myweb
          image: kubeguide/tomcat-app:v1
          ports:
          - containerPort: 8080
          env:
          - name: MYSQL_SERVICE_HOST
            value: "mysql"
          - name: MYSQL_SERVICE_PORT
            value: '3306'

服务配置为:

apiVersion: v1
kind: Service
metadata:
  name: myweb
spec:
  type: NodePort
  ports:
    - port: 8080
      nodePort: 30001
  selector:
    app: myweb

如你所见,Service监听30001端口,当Kubernetes Service监听该端口时,无法通过Internet访问,但是当我使用 nc -l 30001 命令在同一主机上,可以通过Internet访问,这意味着系统层的网络配置没问题。

对于主机的iptables设置,我接受了所有连接,但问题仍然出现。

那为什么我可以用kubernetes服务访问呢?有什么我想念的配置吗?

要使用主机网络公开 kubernetes 服务,您可以使用 Ingress 规则。

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

在您的情况下,入口规则如下。 apiVersion: extensions/v1beta1 kind: Ingress metadata: name: nginx-test spec: rules: - host: test.example.com http: paths: - backend: serviceName: myweb servicePort: 30001 path: /