无法通过外部网络访问kubernetes服务

时间:2017-05-04 09:27:03

标签: networking kubernetes iptables

我用kubernetes 1.3.0设置kubernetes环境,并在同一台主机上运行master和node,我运行一个带有一个RC的tomcat web应用程序,一个带有docker的服务,一切运行正常,我可以通过内部网络访问服务使用curl命令,但是当我尝试使用公共IP从Internet访问服务时,它是失败的。

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

如您所见,服务侦听30001端口,当端口监听Kubernetes服务时,它无法通过Internet访问,但是当我使用时 nc -l 30001 命令在同一主机上,可以通过Internet访问,这意味着网络配置在系统层就可以了。

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

那为什么我可以用kubernetes服务访问它?有没有我错过的配置?

1 个答案:

答案 0 :(得分:0)

要使用主机网络公开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: /