从外网访问k8s ingress

416 阅读1分钟

k8s ingress会创建对应的ingress controller,而ingress controller通过k8s service暴露,外网用户可通过ingress对应的service访问k8s ingress。

nginx ingress controller

[root@master ~]# kubectl  get po -n ingress-nginx --show-labels
NAME                                        READY   STATUS    RESTARTS   AGE     LABELS
ingress-nginx-controller-6b79d4df7b-hnm6s   1/1     Running   0          5d15h   app.kubernetes.io/component=controller,app.kubernetes.io/instance=ingress-nginx,app.kubernetes.io/name=ingress-nginx,pod-template-hash=6b79d4df7b
[root@master ~]# kubectl  get svc -n ingress-nginx
NAME                                 TYPE        CLUSTER-IP      EXTERNAL-IP      PORT(S)          AGE
ingress-nginx-controller             ClusterIP   10.98.124.199   192.168.90.125   80/TCP,443/TCP   13d
ingress-nginx-controller-admission   ClusterIP   10.97.52.8      <none>           443/TCP          20d

ingress-nginx-controller的service selector如下:

apiVersion: v1
kind: Service
metadata:
  labels:
    app.kubernetes.io/component: controller
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/managed-by: Helm
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/version: 1.0.0
    helm.sh/chart: ingress-nginx-4.0.1
  name: ingress-nginx-controller
  namespace: ingress-nginx
spec:
  ports:
  - appProtocol: http
    name: http
    port: 80
    protocol: TCP
    targetPort: http
  - appProtocol: https
    name: https
    port: 443
    protocol: TCP
    targetPort: https
  selector:
    app.kubernetes.io/component: controller
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/name: ingress-nginx

通过service可以访问ingress,如果期望从外网访问ingress的话,可以将service配置为nodePort类型或为clusterIp类型service配置externalIP

# NodePort
...
spec:
  type: NodePort
...

# externalIP
...
spec:
  clusterIP: 10.98.124.199
  clusterIPs:
  - 10.98.124.199
  externalIPs:
  - 192.168.0.12
...